在多进程中环境中,要使用进程安全的multiprocessing.Queue() ,而非Python标准库中的Queue
当一个队列为空的时候如果再用get取则会堵塞,所以取队列的时候一般是用到get_nowait()方法,这种方法在向一个空队列取值的时候会抛一个Empty异常
所以更常用的方法是先判断一个队列是否为空,如果不为空则取值
get_nowait()方法,这种方法在向一个空队列取值的时候会抛一个Empty异常所以更常用的方法是先判断一个队列是否为空,如果不为空则取值
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.get([block[, timeout]]) 获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
非阻塞 Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
multiprocessing中使用子进程概念
可以通过Process来构造一个子进程
p1 = Process(target=fun,args=(args))
p2 = Process(target=fun, kwargs={'name': name, 'symbol': symbol})
同时,在这里说明一下,multiprocessing.Process() 也要在main所在py文件下运行
通过p.start()来启动子进程
再通过p.join()方法来使得子进程运行结束后再执行父进程
from multiprocessing import Process
import os
# 子进程要执行的代码
def run_proc(name):
print 'Run child process %s (%s)...' % (name, os.getpid())
if __name__=='__main__':
print 'Parent process %s.' % os.getpid()
p = Process(target=run_proc, args=('test',))
print 'Process will start.'
p.start()
p.join()
print 'Process end.