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.进程的锁机制以及调用机制(生产者和消费者模式)
同步锁:进程的锁机制就是,对一个对象,我们用不同进程来访问的时候回造成资源的竞争,因此我们需要对对象加上锁的机制,当一个进程访问的时候,我们需要别的进程在等待。
死锁:在竞争资源的时候,有时候那个进程相互等待就造成了死锁现象。还有就是,进程在获取资源后,并没有释放锁然后终止了,这样就造成了,资源一直被占用。
生产者和消费者模式:
这里解决的问题就是用一个容器来解平衡数据的入队,和数据出队之间的关系。
网友评论