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之正规地说一句话
Sep 28 Python
Python复制文件操作实例详解
Nov 10 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
python爬虫基本知识
Mar 05 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
python global和nonlocal用法解析
Feb 03 Python
python操作yaml说明
Apr 08 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python如何在word中存储本地图片
Apr 07 Python
Django给表单添加honeypot验证增加安全性
May 06 Python
python中Matplotlib绘制直线的实例代码
Jul 04 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和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
python比较2个xml内容的方法
2015/05/11 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python删除某个字符
2018/03/19 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
详解Python的循环结构知识点
2019/05/20 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
硕士研究生自我鉴定
2013/11/08 职场文书
新店开张活动方案
2014/08/24 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书