请提供一些我下面的代码,可以帮助我,我正在尝试使用多重处理实现具有多个收益的生成器。
我通常会在生成器的第二次和第三次调用中使用next
后跟send
,但是我不确定如何使用多处理模块来完成此操作。
from multiprocessing import Pool
def sq_divide(x, y):
yield x**y
send_receive = (yield x) #"send_receive" is used as confirmation that text "Done!!" was received
if send_receive=="Done!!":
yield x / y
if __name__ == "__main__":
p = Pool(4)
#first generator call
n = p.map(sq_divide, (range(1, 10), range(1, 10)))
print(n)
#second generator call
n = p.map(next, n)
#last generator call
n = p.map(n.send, "Done!!")
print(n)
我的预期输出是:
first print:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
second print:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
third print:
[1, 1, 1, 1, 1, 1, 1, 1, 1]
答案 0 :(得分:1)
您在这里骑错了马。池工作人员应该接收一些输入数据以完成工作,返回其输出并处理新任务。在这里,工人返回无法拾取的生成器对象,因此会产生错误。但是从根本上讲,生成器必须生存直到耗尽为止,因此在池工作进程中没有意义。
选项:
选择实际上取决于生成器可能遭受的瓶颈