Python多处理队列的获取和放置

硝基

我正在尝试使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章