对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类和继承用法实例
Jul 07 Python
Python实现视频下载功能
Mar 14 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
python爬取个性签名的方法
Jun 17 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
Python实现Appium端口检测与释放的实现
Dec 31 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
Smarty中调用FCKeditor的方法
2014/10/27 PHP
PHP生成plist数据的方法
2015/06/16 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
javascript操作数组详解
2014/12/17 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
python装饰器代替set get方法实例
2019/12/19 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
工艺工程师工作职责
2013/11/23 职场文书
公司市场部岗位职责
2013/12/02 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
文明寝室标语
2014/06/13 职场文书
服务标语大全
2014/06/18 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
安阳殷墟导游词
2015/02/10 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
vue封装数字翻牌器
2022/04/20 Vue.js
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS