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写入中英文字符串到文件的方法
May 06 Python
python获取目录下所有文件的方法
Jun 01 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
详解Python中的测试工具
Jun 09 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
python生成xml时规定dtd实例方法
Sep 21 Python
Python Django模型详解
Oct 05 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 多维数组排序实现代码
2009/08/05 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
numpy数组拼接简单示例
2017/12/15 Python
对Django外键关系的描述
2019/07/26 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
什么是抽象
2015/12/13 面试题
剪枝的学问教学反思
2014/02/07 职场文书
品德评语大全
2014/05/05 职场文书
2014年租房协议书范本
2014/10/30 职场文书
2014年团委工作总结
2014/11/13 职场文书
医院感染管理制度
2015/08/05 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js
Python各协议下socket黏包问题原理
2022/04/12 Python