gpt4 book ai didi

python - 如何将队列引用传递给 pool.map_async() 管理的函数?

转载 作者:IT老高 更新时间:2023-10-28 21:45:23 50 4
gpt4 key购买 nike

我想要一个长时间运行的进程通过队列(或类似的东西)返回它的进度,我将把它提供给进度条对话框。当过程完成时,我还需要结果。此处的测试示例失败并出现 RuntimeError: Queue objects should only be shared between processes through inheritance

import multiprocessing, time

def task(args):
count = args[0]
queue = args[1]
for i in xrange(count):
queue.put("%d mississippi" % i)
return "Done"

def main():
q = multiprocessing.Queue()
pool = multiprocessing.Pool()
result = pool.map_async(task, [(x, q) for x in range(10)])
time.sleep(1)
while not q.empty():
print q.get()
print result.get()

if __name__ == "__main__":
main()

我已经能够使用单独的 Process 对象(我 am 允许传递 Queue 引用)让它工作,但是我没有一个池来管理我的许多进程想启动。有什么更好的模式建议吗?

最佳答案

以下代码似乎有效:

import multiprocessing, time

def task(args):
count = args[0]
queue = args[1]
for i in xrange(count):
queue.put("%d mississippi" % i)
return "Done"


def main():
manager = multiprocessing.Manager()
q = manager.Queue()
pool = multiprocessing.Pool()
result = pool.map_async(task, [(x, q) for x in range(10)])
time.sleep(1)
while not q.empty():
print q.get()
print result.get()

if __name__ == "__main__":
main()

请注意,队列来自 manager.Queue() 而不是 multiprocessing.Queue()。感谢 Alex 为我指明了这个方向。

关于python - 如何将队列引用传递给 pool.map_async() 管理的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217002/

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