multiprocessing.Queue() 和 Queue.Queue() 有区别吗?

2015-05-18 10:47:19 +08:00
 cc7756789
用法都一样, 但下面这段代码,Queue从 Queue.Queue导入,read函数便没有执行

from multiprocessing import Pool, Process, Queue
import os, time, random

def write(q):
for v in ['A', 'B', 'C']:
print 'Put %s to queue ' % v
q.put_nowait(v)
time.sleep(random.random())

def read(q):
while 1:
if not q.empty():
v = q.get(True)
print "Get %s from queue" % v
time.sleep(random.random())
else:
break

if __name__ == '__main__':
q = Queue()
pw = Process(target=write, args=(q, ))
pr = Process(target=read, args=(q, ))
pw.start()
pw.join()

pr.start()
pr.join()

print "all done.."
3593 次点击
所在节点    Python
4 条回复
clino
2015-05-18 11:48:14 +08:00
multiprocessing.Queue 这个重点是支持进程间的通讯
第二个应该木有这种功能吧
cc7756789
2015-05-18 15:55:32 +08:00
@clino 我的理解就是Queue模块是给多线程用的,多线程之间可以共享内存,而multiprocessing自带的Queue支持多进程间的通讯 ?
clino
2015-05-18 16:18:00 +08:00
@cc7756789
文档不看的?
'''
multiprocessing supports two types of communication channel between processes:

Queues
...
Pipes
...

'''
kimchan
2015-06-16 17:56:47 +08:00
multiprocessing.Queue 是用来支持多个进程使用一个队列的, 如果你程序是多进程, 但是使用的队列的Queue.Queue, 那么每个进程就会都新建了一个队列, 无法供应资源

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/191837

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX