对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的Template使用指南
Sep 11 Python
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
python使用opencv进行人脸识别
Apr 07 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
python实现停车管理系统
Nov 30 Python
Python基本socket通信控制操作示例
Jan 30 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 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+ajax+json 详解及实例代码
2016/12/12 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
JavaScript之自定义类型
2012/05/04 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
Python Trie树实现字典排序
2014/03/28 Python
Python解析nginx日志文件
2015/05/11 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python超时重新请求解决方案
2019/10/21 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
中学生校园广播稿
2014/01/16 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
优秀会计求职信
2014/07/04 职场文书
作文评语集锦
2014/12/25 职场文书
语文复习计划
2015/01/19 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python