私はUbuntu 8.10でPython 2.6.5を実行しています。Pythonプロセス内で付加価値を返すことができません
私が進めているプロジェクトでは、いくつかのプロセスを同時に実行し、それぞれの出力をそれぞれのリストに保存する必要があります。私はプロセスから直接出力値を返すことができないので、出力リストを引数としてターゲット関数に渡し、出力をそのリストに追加しています。問題は、プロセスを実行した後でそのリストにアクセスしようとすると、そのリストはまだ空であるということです。私が持っている問題の簡略化されたバージョンは、エラーメッセージと共に以下にあります。
コード:
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はリストに固有のようです。 Processの代わりにThreadを使って全く同じコードを実行すると、問題のない出力が得られ、これがメモリ共有の問題だと私は思っています。
コードの書式を修正してください。特に、Pythonコードでは、どのようにインデントされているかを確認することが重要です。 –
AMPQのようなものを使用すると、サーバマシン間で作業を簡単に配布できます。 –
'multiprocessing.Queue'sの使用を検討しましたか? – nmichaels