python 进程,队列

2019-05-05  本文已影响0人  小姐姐催我改备注

1.进程,队列

在python中虽然不能发挥多线程的优势,但是对于tensorflow中,多线程任务,我们可以写多个线程来执行。下面介绍两个函数,Queue(),Process()

2.Queue()

先来介绍这个函数的属性,和方法,以及对应的使用。

index = queue(maxsize=n) 
这里定义队列的数量。
__getstate__
__setstate__
_after_fork
这是几个内置函数的方法,暂时不知道有什么作用。

def put(self, obj, block=True, timeout=None):
放入数据到队列中去,
Block值默认为True,代表当队列已满时,会阻塞。如果block为False,则队列满会报异常Queue.Full
timeout表示会阻塞到指定时间,直到有剩余的空间供插入,如果时间超时,则报异常Queue.Full

def get(self, block=True, timeout=None):
Block值默认为True,代表当队列为空时,会阻塞。如果block为False,则队列空会报异常Queue.Empty
timeout表示会等待到指定时间,直到取出数据,如果时间超时,则报异常Queue.Empty

def qsize(self):
判断队列是否为空,如果空返回True

def empty(self):
判断队列是否已满,如果满返回True

def full(self):
判断队列是否已满,如果满返回True

def get_nowait(self):
相当于get()  block = False
 
def put_nowait(self, obj):
相当于 put() block = False

def close(self):
进程池不再创建新的进程

def join_thread(self):

def cancel_join_thread(self):

3.Process()

进程函数的方法及其属性

precess .daemon
p.daemon = True -->守护进程,守护进程不可以再有子进程,并且主进程死守护进程就死,要写在p.start()之前

p.join() ---> 主进程等子进程执行完 之后再结束

p.terminate()-->强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,用该方法需要特别小心这种情况。如果p保存了一个锁那么也将不会被释放,进而导致死锁

p.is_alive() -->如果p仍然运行,返回True

p.name -->查看进程的名称

p.pid  -->查看进程的pid

p.start()
start() 方法是启动一个子线程,线程名就是自己定义的name。

p.run()
run() 方法并不启动一个新线程,就是在主线程中调用了一个普通函数而已。

4.进程的锁机制以及调用机制(生产者和消费者模式)

同步锁:进程的锁机制就是,对一个对象,我们用不同进程来访问的时候回造成资源的竞争,因此我们需要对对象加上锁的机制,当一个进程访问的时候,我们需要别的进程在等待。

死锁:在竞争资源的时候,有时候那个进程相互等待就造成了死锁现象。还有就是,进程在获取资源后,并没有释放锁然后终止了,这样就造成了,资源一直被占用。

生产者和消费者模式:


这里解决的问题就是用一个容器来解平衡数据的入队,和数据出队之间的关系。

上一篇下一篇

猜你喜欢

热点阅读