Python multiprocessing.Pool与崩溃的进程
嗯,他们不应该撞车,但他们无论如何都会撞车。有没有一种方法可以让multiprocessing.Pool或任何其他多处理工具重新启动一个死亡的进程?否则我怎么做 谢谢 编辑:一些背景。该过程在Autodesk Maya中对几何体执行多项操作。它做得很好。问题是,每隔一段时间,我就会有一个文件,它决定一旦完成并打开一个新场景,就完全退出Maya(或mayapy),而不会出现python警告或错误,也不会出现来自Windows的严重进程错误。它只是死了。不幸的是,我对撞车事件无能为力Python multiprocessing.Pool与崩溃的进程,python,multiprocessing,Python,Multiprocessing,嗯,他们不应该撞车,但他们无论如何都会撞车。有没有一种方法可以让multiprocessing.Pool或任何其他多处理工具重新启动一个死亡的进程?否则我怎么做 谢谢 编辑:一些背景。该过程在Autodesk Maya中对几何体执行多项操作。它做得很好。问题是,每隔一段时间,我就会有一个文件,它决定一旦完成并打开一个新场景,就完全退出Maya(或mayapy),而不会出现python警告或错误,也不会出现来自Windows的严重进程错误。它只是死了。不幸的是,我对撞车事件无能为力 我所希望的是一
我所希望的是一种重新启动因崩溃而死亡的进程的方法。显然,最近他们改变了Python 3.3中的行为,在这种情况下引发了一个异常: 导致此票据的缺陷是: 但是,如果手动生成工作进程(我使用多处理时通常会这样做),则可以尝试使用进程。is_alive()函数:
事实上,正如masida所说,python 3.3中的错误处理更好。在这里,我检查当一个子进程安静地停止时的超时
这个解决方案是针对python的,它们是如何崩溃的?期望的行为是什么?这是要回滚的事务吗?这只是个例外吗?请提供更多详细信息。正如Paul所说,我们需要更多详细信息来回答您,至少是有问题的代码和您遇到的错误。添加了更多详细信息以帮助解释我希望这样做的原因。感谢您提供的信息。我想我将开始处理自己的流程。
done = False # not finished yet
while not(done):
job_start = time.time() # start time
Jobs = pool.map_async(args) # asynchronous pool call
redo = False # no redo yet
while not(Jobs.ready()): # while jobs are not finished
if (time.time() - job_start) > maxWait: # check maximum time (user def.)
pool.terminate() # kill old pool
pool = multiprocessing.pool(args) # create new pool
redo = True # redo computation
break # break loop, (not finished)
if not(redo): # computation was successful
result = Jobs.get() # get results
done = True # exit outer while