对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中集合类型(set)学习小结
Jan 28 Python
python实现爬取千万淘宝商品的方法
Jun 30 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
详解python eval函数的妙用
Nov 16 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
Python安装pycurl失败的解决方法
Oct 15 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
Dec 10 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 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
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
vue filters的使用详解
2018/06/11 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
python中偏函数partial用法实例分析
2015/07/08 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
python读取LMDB中图像的方法
2018/07/02 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
Python3获取cookie常用三种方案
2020/10/05 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
合同专员岗位职责
2013/12/18 职场文书
初三物理教学反思
2014/01/21 职场文书
《自选商场》教学反思
2014/02/14 职场文书
中秋节主持词
2014/04/02 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
女生抽烟检讨书
2014/10/05 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
暑假安全保证书
2015/02/28 职场文书
《火烧云》教学反思
2016/02/23 职场文书
导游词幽默开场白
2019/06/26 职场文书
python turtle绘图命令及案例
2021/11/23 Python