对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操作日期和时间的方法
Mar 11 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
python求平均数、方差、中位数的例子
Aug 22 Python
python实现统计代码行数的小工具
Sep 19 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
python 读取二进制 显示图片案例
Apr 24 Python
python 利用toapi库自动生成api
Oct 19 Python
python 合并多个excel中同名的sheet
Jan 22 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
php页面缓存方法小结
2015/01/10 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
js切换div css注意的细节
2012/12/10 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
python读写json文件的简单实现
2017/04/11 Python
python实现列表的排序方法分享
2019/07/01 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
药学专业毕业生求职信
2013/10/20 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
社保委托书怎么写
2014/08/02 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android