Python基于进程池实现多进程过程解析


Posted in Python onApril 30, 2020

1、注意:pool必须在 if __name__ == '__main__' 下面运行,不然会报错

2、多进程内出现错误会直接跳过该进程,并且默认不会打印错误信息

3、if__name__下面的数据需要通过参数传入主函数里面,不然主函数获取不到该数据值而报错。

4、若不通过传参形式传入数据,可以定义全局变量。但是全局变量的值不能在多进程里面进行修改。

代码如下

from multiprocessing import Pool # 进程池,用于多进程
import os # 用于获取当前执行的文件名
import time
import traceback # 用于捕获异常
import sys # 用于捕获异常


def main_func(i): # 多进程运行的函数
  try: # 多进程中发生异常是不会打印错误信息,并且当前进程会直接跳过,所以异常需要自行捕获
    rand_time = random.randint(1, 3) # 随机产生1~3的整数
    time.sleep(rand_time )
    print(i)
  except:
    current_filename = str(os.path.basename(sys.argv[0]))[:-3] # 获取当前文件名称
    cur_err_filname = current_filename + '_error.txt'
    error_info = sys.exc_info() # 打印异常
    with open(f'{cur_err_filname }', 'a') as f:
      error_str = f'{i}:ERROR OCCURRED,{time.strftime("%Y-%m-%d %H:%M:%S")}:\n {error_info[0]}: {error_info[1]}' # 记录当前进程特征值,错误发生时间 ,错误类型,错误概述
      print(error_str, file=f) # 通过打印方式写入文件
      traceback.print_tb(error_info[2], file=f) # 错误细节描述(包括bug的代码位置)
      f.write(f"{'=' * 50}\n") # 分行


if __name__ == '__main__': # 必须在此语句下面运行,不然会报错
  pool = Pool(5) # 定义进程数量
  for i in range(20):
    pool.apply_async(main_func, (i, )) # 调用函数执行多进程
  pool.close() # 关闭进程池
  pool.join() # 阻塞进程,此两部不能少,保证多进程正常运行

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Paramiko模块的使用实际案例
Feb 01 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
centos7中安装python3.6.4的教程
Dec 11 Python
基于python监控程序是否关闭
Jan 14 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 Python
Python requests用法和django后台处理详解
Mar 19 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 #Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 #Python
Pytorch高阶OP操作where,gather原理
Apr 30 #Python
python利用Excel读取和存储测试数据完成接口自动化教程
Apr 30 #Python
Python闭包与装饰器原理及实例解析
Apr 30 #Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 #Python
Pycharm连接远程服务器过程图解
Apr 30 #Python
You might like
个人写的PHP验证码生成类分享
2014/08/21 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
深入理解javaScript中的事件驱动
2013/05/21 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
Js面试算法详解
2018/04/08 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
店长职务说明书
2014/02/04 职场文书
生日庆典策划方案
2014/06/02 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
创业计划书之家教托管
2019/09/25 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript