私は長い間、実行中のタスクのいずれかを並列化しようとしています。何らかの理由で、それはちょうど終わらず、永遠にぶら下がっています。Pythonのマルチプロセッシング - なぜ私のプロセスが戻っていないされている/仕上げ?
import multiprocessing as mp
class PartitionedResult(object):
index = 0
P = []
def __init__(self, index, P):
self.index = index
self.P = P
def longRunningTask(index, output):
P = []
for i in range (0, 1000):
print(i)
P.append(i)
print("I'm done!")
output.put(PartitionedResult(index, P))
return
def main():
output = mp.Queue()
processes = [mp.Process(target=longRunningTask, args=(x,output,)) for x in range(4)]
for p in processes:
p.start()
for p in processes:
p.join()
results = [output.get() for p in processes]
print("This never shows up")
if __name__ == '__main__':
main()
4つのプロセスごとに0〜999の数字が印刷され、「完了しました! results = [output.get() for p in processes]
行
for
ループの範囲を狭くして、たとえばrange(0,50)
とすると、突然動作します。
ここで問題は何ですか?
編集:私は、Windows 10上のPython 3.4を使用しています、私は2台の異なるコンピュータ上で、削除pycacheでそれを試してみました。
は再現することはできません。投稿されたコードは私のために働いた。 – tdelaney
ああ!それは奇妙だ。私は新しいファイルにコードをコピーして、私はまだ同じ問題を抱えています。私は自分のPCを2回再起動しました。実行しているPythonのバージョンは?私は窓の上のpython 3.4です。 – user66875
私はLinux mint 17.3でpython 3.4です。 – tdelaney