import multiprocessing
import datetime
import time
import os
import subprocess
from subprocess import PIPE
import pdb
#子进程中某个进程发生异常,则结束整个进程池
def work_process(i):
time.sleep(1)
raise Exception(multiprocessing.current_process().name)
return 'a' + str(i)
def throw_exception(name):
print('子进程%s发生异常,进程号为%s'%(name,os.getpid()))
cmd = 'taskkill /im '+ str(os.getpid())+' /F'
res = subprocess.Popen(cmd,shell=True,stdin=PIPE,stdout=PIPE)
print(res.stdout.read())
print(res.stderr.read())
time.sleep(2)
if __name__ == '__main__':
res = []
with multiprocessing.Pool(processes=10) as pool:
for i in range(10): # 遍历所有的文件
start_time_fp = datetime.datetime.now()
r = pool.apply_async(func=work_process,args= (i,),error_callback=throw_exception)
over_time_fp = datetime.datetime.now()
total_time = (over_time_fp - start_time_fp).total_seconds()
print('启动单个程序%s完成共计%s秒' % (i,total_time))
pool.close() # 关闭进程池,不再接受请求
pool.join() # 等待进程池中的任务执行完毕
print(res)#打印异步结果