对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中threading超线程用法实例分析
May 16 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python 操作hive pyhs2方式
Dec 21 Python
Python接口测试结果集实现封装比较
May 01 Python
高考考python编程是真的吗
Jul 20 Python
新手必备Python开发环境搭建教程
May 28 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 格式化数字的时候注意数字的范围
2010/04/13 PHP
php自动加载的两种实现方法
2010/06/21 PHP
js Math 对象的方法
2013/09/01 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python 画出来六维图
2019/07/26 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
Linux面试题LINUX系统类
2015/11/25 面试题
初中地理教学反思
2014/01/11 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
工商局调档介绍信
2015/10/22 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python