昨天学了下子进程创建,然后自己做实例的时候,发现子进程不运行,而是直接结束了主进程。由于是子进程,所以有没有错误看不见。
from multiprocessing import Pool import os,time,random def worker(msg): t_start = time.time() print("%s开始执行,进程号为%d"%(msg, os.grtpid())) time.sleep(random.random()*2) t_stop = time.time() print(msg,"执行完毕,耗时%0.2f"%(t_stop - t_start)) po=Pool(3) for i in range(0,10): po.apply_async(worker,(i,)) print("-----strat-----") po.close() po.join() print("------end------")
结果就是
----start---- -----end-----
错误原因是定义worker时,os.getpid()写错
之后在函数中加入异常处理即可发现错误,即:
def worker(msg): try: t_start = time.time() print("%s开始执行,进程号为%d"%(msg, os.grtpid())) time.sleep(random.random()*2) t_stop = time.time() print(msg,"执行完毕,耗时%0.2f"%(t_stop - t_start)) except Exception as ex: msg = "you cuo wu, shi:%s"%ex print(ex)
之后便能直接发现问题所在,不用自己一遍遍找,调试,还可能找不到问题。
try真好用啊_(:3」∠)_