问题背景:
主进程做任务调度,子进程做任务执行,子进程定时返回进度信息,主进程获取进度,进度为100时,子进程任务结束。子进程执行过程中如果有异常,主进程需要捕获
python多进程调度, 主进程如何捕获子进程的异常,这个问题困扰了好久,网上看了好多方法都不是我想要的,整理了一下遇到的一些坑
为了简化子进程任务实现,和主进程的任务等待的过程,直接用time.sleep(),先看下最终实现方案:
from multiprocessing import Pool
import time
def sub_task():
print "sub_task():enter sub_task"
loop_num = 0
while True:
print "sub_task:enter sub process loop"
if loop_num > 1:
print 'sub_task():sub_task finish'
raise Exception("sub_task has error")
loop_num += 1
time.sleep(1)
if __name__ == "__main__":
try:
proc_pool = Pool(processes=6)
result = proc_pool.apply_async(sub_task, args=())
proc_pool.close()
count = 0
while True:
print "main():enter main process loop"
time.sleep(2)
if result.ready():
print 'main():sub process is finish'
result.ge