gpt4 book ai didi

python - 多处理 apply_async 与多处理队列的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:53 25 4
gpt4 key购买 nike

import time
import multiprocessing

def multi_thread(files):
q = multiprocessing.Queue()

for f in files:
q.put(f)

p = multiprocessing.Pool(5)

for i in range(5):
p.apply_async(worker_test, args=(q,))

p.close()
p.join()


def worker_test(i):
print 'hello'
print i


def main():
files = ['a', 'b', 'c', 'd']

multi_thread(files[0:4])
print 'Multi-thread time: {0} seconds'.format(time.time() - t0)

if __name__ == '__main__':
main()

如果我传入 q,我的代码甚至不会进入 work_test() 函数来打印 hello。但如果我将 q 更改为 i,代码运行正常。不知何故,它不喜欢 multiprocessing.Queue() 对象 - 你知道发生了什么吗?

最佳答案

您需要创建一个可以在不同进程之间共享的队列实例。您可以使用multiprocessing.Manager来做到这一点对象。

以下代码似乎有效:

import time
import multiprocessing

def multi_thread(files):
m = multiprocessing.Manager()
q = m.Queue()

for f in files:
q.put(f)

p = multiprocessing.Pool(5)
for i in range(5):
p.apply_async(worker_test, args=(i, q))

p.close()
p.join()

def worker_test(i, q):
print 'hello'
print i

def main():
files = ['a', 'b', 'c', 'd']

multi_thread(files[0:4])

if __name__ == '__main__':
main()

关于python - 多处理 apply_async 与多处理队列的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28338099/

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