我正在尝试使用python多处理以字符串填充队列,然后将它们打印回去,但遇到了麻烦。有人可以指出我做错了吗?
import multiprocessing
my_q = multiprocessing.Queue()
my_list =[i for i in range(0,100)]
def enqueue(q):
for data in my_list:
q.put(data)
def get_it(q):
while not q.empty():
item = q.get()
print(item)
p1 = multiprocessing.Process(target=enqueue, args=(my_q,))
p2 = multiprocessing.Process(target=get_it, args=(my_q,))
p1.start()
p2.start()
p1.join()
p2.join()
该程序执行时不打印任何内容。
如果get_it
在填充队列之前执行,它将立即返回,不打印任何内容。
您需要确保在get_it
调用之前已填充队列。
例如,等待直到enqueue
被调用,直到所有项目都入队:
...
p1 = multiprocessing.Process(target=enqueue, args=(my_q,))
p1.start()
p1.join()
p2 = multiprocessing.Process(target=get_it, args=(my_q,))
p2.start()
p2.join()
或get_it
如下修改不要过早结束:
...
def get_it(q):
while True:
item = q.get()
if item is None: # loop until sentinel value (None) appear.
break
print(item)
my_list.append(None) # sentinel value to denote end of input value
p1 = multiprocessing.Process(target=enqueue, args=(my_q,))
p2 = multiprocessing.Process(target=get_it, args=(my_q,))
p1.start()
p2.start()
p1.join()
p2.join()
或multiprocess.pool.Pool.map
改用:
import multiprocessing.pool
def get_it(item):
print(item)
pool = multiprocessing.pool.Pool()
pool.map(get_it, range(100))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句