如果不赶在子流程异常,自己打印出来,你不会看到他们。下面的程序不产生输出:
import os
from multiprocessing import Pool
def outputFile(person):
raise Exception("An exception")
pool = Pool(processes=4)
for person in range(100):
pool.apply_async(outputFile, args=(person,))
pool.close()
pool.join()
你需要捕获所有异常和手动打印回溯:
import os
from multiprocessing import Pool, Lock
import traceback
print_lock = Lock()
def outputFile(person):
try:
raise Exception("An exception")
except:
with print_lock:
print "%s: An exception occurred" % person
print traceback.format_exc()
pool = Pool(processes=4)
for person in range(100):
args = (person, print_lock)
pool.apply_async(outputFile, args=(person,))
pool.close()
pool.join()
输出
0: An exception occurred
Traceback (most recent call last):
File "person.py", line 9, in outputFile
raise Exception("An exception")
Exception: An exception
1: An exception occurred
Traceback (most recent call last):
File "person.py", line 9, in outputFile
raise Exception("An exception")
Exception: An exception
...
99: An exception occurred
Traceback (most recent call last):
File "person.py", line 9, in outputFile
raise Exception("An exception")
Exception: An exception
注:的print_lock
是用于保持交错输出。
我不确定。通常我会说99%的时间没有出现错误。但偶尔该过程会下降,并且不会形成输出文件。 – DolphinGenomePyramids
它可能是IO异常或子进程上的一些运行时错误,它们在调用进程中不显示。 – neurite