此Queue非彼Queue,stdlib中的queue模块,是提供给多线程环境使用的。multiprocess.Queue,是提供个python多进程见通信使用的。
python有一个好的设计,即多线程和多进程的接口基本相同,现在这两个Queue的使用接口也基本相同!
from multiprocessing import Process, Queue
def f(q):
q.put([42, None, 'hello'])
if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print(q.get()) # prints "[42, None, 'hello']"
p.join()
这个python官方的示例有点太简单了,我弄了一个复杂点的,就想说明一个细节:multiprocessing.Queue可用于多个进程间的通信。
from multiprocessing import Process, Queue
def f(q):
q.put([42, None, 'hello'])
def g(q):
q.put([48, None, 'hello gggg'])
def h(q):
print(q.get())
print(q.get())
if __name__ == '__main__':
q = Queue()
p1 = Process(target=f, args=(q,))
p2 = Process(target=g, args=(q,))
p3 = Process(target=h, args=(q,))
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
主进程开了3个子进程,两个做put,一个做get,运行良好。
-- EOF --