对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处理python编码问题
Mar 13 Python
python使用循环实现批量创建文件夹示例
Mar 25 Python
Python yield与实现方法代码分析
Feb 06 Python
Python中GIL的使用详解
Oct 03 Python
Python编程中flask的简介与简单使用
Dec 28 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
python3 pillow模块实现简单验证码
Oct 31 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
Python如何读写CSV文件
Aug 13 Python
python实战之用emoji表情生成文字
May 08 Python
Python 匹配文本并在其上一行追加文本
May 11 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
SONY ICF-SW55的电路分析
2021/03/02 无线电
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php无限遍历文件夹示例分享
2014/03/04 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
简单的js表格操作
2016/09/24 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
Python数据可视化之画图
2019/01/15 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
大一期末自我鉴定
2013/12/13 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
法院信息化建设方案
2014/05/21 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
高考升学宴主持词
2019/06/21 职场文书
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android