最近在研究如何提升python程序性能的問題(本身是個偽命題),使用了多線程,速度比之前還慢,后續又采用進程池,但是進程池遇到的坑,我只能說python很傻逼!
進程池的實現、1、python 自帶的 multiprocessing , 涉及序列化問題,要升級到pathos的multiple包
pip install dill
pip install pathos
2、多進程還涉及日志打印問題
python 進程、要采用多進程打日志組件
pip install concurrent-log-handler
3、最最重要的 就是在子進程中導入進程需要依賴的包
進程池和線程池?
4、檢測子進程是否結束 也需要自定義方法,如下:
def check_multi_process_done(self, res):is_done = Falseloop_count = 0done_count = 0while (not is_done):loop_count += 1is_done = Trueundone_count = 0for job in res:try:is_ready = job.ready()if not is_ready:is_done = Falseundone_count += 1continueis_ready = job.successful()if not is_ready:is_done = Falseundone_count += 1continues = job.get() # get()獲取返回值done_count += 1res.remove(job)code_log.info(F"進程結束,結果為:{s}")except Exception as e:logging.getLogger("error").error(f"{traceback.format_exc()}")if not is_done:if loop_count > 10 and undone_count / done_count < 0.2:code_log.info(f"進程未結束,但是已經輪詢了{loop_count} 完成任務數 {done_count} 未完成數 {undone_count},不再監測,完成任務")breakcode_log.info(f"進程未結束loop_count= {loop_count} 完成任務數 {done_count} 未完成數 {undone_count},sleep 5s 繼續監測")sleep(120)
進程池的特點,5、通過?
pool.terminate();
來關閉進程池
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态