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