昨天学了下子进程创建,然后自己做实例的时候,发现子进程不运行,而是直接结束了主进程。由于是子进程,所以有没有错误看不见。
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」∠)_
在Python3中使用multiprocessing模块创建子进程时遇到子进程未执行的问题,原因是worker函数中的os.getpid()错误。通过添加try-except异常处理,能够及时捕获并打印错误,方便调试。在修正os.getpid()为os.grtpid()后,子进程正常运行,证明了try-except结构在排查问题中的实用性。
2836

被折叠的 条评论
为什么被折叠?



