对Python3之进程池与回调函数的实例详解


Posted in Python onJanuary 22, 2019

进程池

代码演示

方式一

from multiprocessing import Pool


def deal_task(n):
 n -= 1
 return n


if __name__ == '__main__':
 n = 10
 p = Pool(4)
 for i in range(4):
  res = p.apply(deal_task, args=(n,))
  #调用apply是一个串行的效果,任务会被进程一个一个的处理,直接得到结果
  #前提是执行的任务必须要有返回值
  print(res)

方式二

from multiprocessing import Pool


def deal_task(n):
 n -= 1
 return n


if __name__ == '__main__':
 n = 10
 p = Pool(4)
 obj_l = []
 for i in range(4):
  #调用apply_async会返回一个对象,主进程会不断扔任务给线程池,让子线程处理
  obj = p.apply_async(deal_task, args=(n,))
  obj_l.append(obj)
 #首先函数要有返回值
 #调用close目的是防止join期间会有别的任务被添加到任务列表中
 #不调用close会报错
 p.close()
 p.join()
 #join是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。
 for obj in obj_l:
  print(obj.get())

方式三

from multiprocessing import Pool

import requests


def get_page(url):
 ret = requests.get(url).text
 return {'url': url, 'ret': ret}


def parse_page(ret):
 with open('ab.txt', 'a') as f:
  f.write('%s - %s\n' % (ret['url'], len(ret['ret'])))


if __name__ == '__main__':
 urls = [
  'https://www.baidu.com',
  'http://www.openstack.org',
  'https://www.python.org',
  'https://help.github.com/',
  'http://www.sina.com.cn/'
 ]
 p = Pool()
 for url in urls:
  #使用回调函数,当get_page下载完后,主线程调用parse_page自动处理get_page下载的结果,节省了parse_page的时间,该场景用于一个函数为耗时操作并且产生数据,另一个函数是非耗时操作,这样就节省了非耗时操作函数的时间
  p.apply_async(get_page, args=(url,), callback=parse_page)

 p.close()
 p.join()
 print('主')

join是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。

以上这篇对Python3之进程池与回调函数的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3.6简单操作Mysql数据库
Sep 12 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
pytorch自定义二值化网络层方式
Jan 07 Python
利用python画出AUC曲线的实例
Feb 28 Python
Keras Convolution1D与Convolution2D区别说明
May 22 Python
Python实现EM算法实例代码
Oct 04 Python
python中复数的共轭复数知识点总结
Dec 06 Python
python语言time库和datetime库基本使用详解
Dec 25 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
python非标准时间的转换
Jul 25 Python
python多任务及返回值的处理方法
Jan 22 #Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 #Python
python自动发送测试报告邮件功能的实现
Jan 22 #Python
python3去掉string中的标点符号方法
Jan 22 #Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 #Python
python3.4爬虫demo
Jan 22 #Python
使用Template格式化Python字符串的方法
Jan 22 #Python
You might like
缅甸的咖啡简史
2021/03/04 咖啡文化
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
jQuery实现广告条滚动效果
2017/08/22 jQuery
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
跟老齐学Python之再深点,更懂list
2014/09/20 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
西式婚礼证婚词
2014/01/12 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
保安辞职信范文
2015/02/28 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
2016国庆促销广告语
2016/01/28 职场文书
如何才能写好调研报告?
2019/07/03 职场文书