对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 相关文章推荐
python实现ip查询示例
Mar 26 Python
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
Python 20行简单实现有道在线翻译的详解
May 15 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
微信公众号token验证失败解决方案
Jul 22 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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
一个简单且很好用的php分页类
2013/10/26 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
浅谈php7的重大新特性
2015/10/23 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
jquery简单体验
2007/01/10 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
python实现的防DDoS脚本
2011/02/08 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
对python中的装包与解包实例详解
2019/08/24 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
Python运算符+与+=的方法实例
2021/02/18 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
个人现实表现材料
2014/02/04 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
什么是就业协议书
2014/04/17 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python