gpt4 book ai didi

Python多处理队列获取和放置

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:45 28 4
gpt4 key购买 nike

我正在尝试使用 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))

关于Python多处理队列获取和放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com