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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
python遍历目录的方法小结
Apr 28 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
python提取log文件内容并画出图表
Jul 08 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
Django框架 querySet功能解析
Sep 04 Python
Python的互斥锁与信号量详解
Sep 12 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
给numpy.array增加维度的超简单方法
Jun 02 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
php4的session功能评述(一)
2006/10/09 PHP
php读取数据库信息的几种方法
2008/05/24 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
python实现海螺图片的方法示例
2019/05/12 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Python list和str互转的实现示例
2020/11/16 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
英语专业个人求职自荐信
2013/09/21 职场文书
法律专业自我鉴定
2013/10/03 职场文书
晚会邀请函范文
2014/01/24 职场文书
团支部建设方案
2014/05/02 职场文书
农业项目投资意向书
2015/05/09 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
MySQL创建表操作命令分享
2022/03/25 MySQL
Redis实战高并发之扣减库存项目
2022/04/14 Redis