【发布时间】:2010-12-02 19:00:14
【问题描述】:
我在 Ubuntu 8.10 上运行 Python 2.6.5。
对于我正在进行的项目,我需要同时运行多个进程并将它们的每个输出保存到各自的列表中。由于我不能直接从进程返回输出值,我将输出列表作为参数传递给我的目标函数并将输出附加到该列表。问题是当我在运行进程后尝试访问该列表时,该列表仍然是空的。下面是我遇到的问题的简化版本以及错误消息。
代码:
from multiprocessing import Process
import sys, math, os,commands
outputs = []
def calculate(a,b,outputs):
c = a*b
outputs.append(c)
#return c
outputs1 = []
p1 = Process(target = calculate, args = (2,3,outputs1))
p1.start()
p1.join()
print 'len(outputs1) = ' + str(len(outputs1))
print 'outputs1 = ' + str(outputs1[0])
错误:
len(outputs1) = 0
Traceback (most recent call last):
File "append_test.py", line 23, in <module>
print 'outputs1 = ' + str(outputs1[0])
IndexError: list index out of range
我试图让每个进程完全独立于其他进程,以免损坏数据。我已经研究过尝试使用多处理中的 Array 模块,但似乎 append 是特定于列表的。当我使用 Thread 而不是 Process 运行完全相同的代码时,我可以毫无问题地获得所需的输出,这让我相信这是内存共享的问题。
【问题讨论】:
-
请修正您的代码格式 - 对于 Python 代码来说,查看事物的缩进方式尤为重要。
-
使用类似 AMPQ 的东西可以很容易地在服务器之间分配工作。
-
你考虑过使用
multiprocessing.Queues吗?
标签: python list process append