gpt4 book ai didi

python多处理找不到错误

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

我正在尝试运行具有多处理功能的函数。这是代码:

import multiprocessing as mu

output = []
def f(x):
output.append(x*x)


jobs = []
np = mu.cpu_count()

for n in range(np*500):
p = mu.Process(target=f, args=(n,))
jobs.append(p)


running = []

for i in range(np):
p = jobs.pop()
running.append(p)
p.start()

while jobs != []:
for r in running:
if r.exitcode == 0:
try:
running.remove(r)
p = jobs.pop()
p.start()
running.append(p)
except IndexError:
break

print "Done:"
print output

输出是[],而它应该是[1,4,9,...]。有人看到我在哪里犯了错误吗?

最佳答案

您正在使用多处理,而不是线程。因此,您的输出列表不会在进程之间共享。

有几种可能的解决方案;

  1. 保留程序的大部分内容,但使用multiprocessing.Queue而不是列表。让工作人员将结果放入队列中,并从主程序中读取它。它将在进程之间复制数据,因此对于大数据 block ,这将产生巨大的开销。
  2. 您可以以multiprocessing.Array 的形式使用共享内存。如果处理的数据很大,这可能是最好的解决方案。
  3. 使用。这将为您处理所有流程管理。就像队列一样,它将数据从一个进程复制到另一个进程。它可能是最容易使用的。 IMO 如果发送到/来自每个工作人员的数据很小,这是最好的选择。
  4. 使用线程,以便在线程之间共享输出列表。 CPython 中的线程有一个限制,即一次只能有一个线程执行 Python 字节码,因此您可能无法获得预期的性能优势。与多处理解决方案不同,它不会利用多核。

关于python多处理找不到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097511/

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