python多进程中multiprocessing队列

寇丰
2023-12-01

在多进程中环境中,要使用进程安全的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.
 类似资料: