1
我想並行我的一個長時間運行的任務。出於某種原因,它不會完成並永遠懸掛。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()
這是打印數字0-999的4個過程中的每一個,它甚至達到了「我完成了!」。線,但它只是不會去results = [output.get() for p in processes]
線
如果我減少for
循環的範圍,讓我們說range(0,50)
,它突然起作用。
這裏有什麼問題?
編輯:我在Windows 10上使用Python 3.4,我在2臺不同的計算機上試過並刪除了pycache。
無法重現。發佈的代碼爲我工作。 – tdelaney
噢!真奇怪。我將代碼複製到一個新文件中,並且仍然存在相同的問題。我重新啓動了我的電腦兩次。你運行的是哪個版本的Python?我在窗口上的Python 3.4上 – user66875
我是在Linux mint 17.3上的python 3.4。 – tdelaney