对Python3之进程池与回调函数的实例详解
作者:Quincy379 发布时间:2022-07-30 13:07:01
标签:Python3,进程池,回调函数
进程池
代码演示
方式一
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是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。
来源:https://blog.csdn.net/qq_33733970/article/details/77650113
0
投稿
猜你喜欢
- Adobe AIR 在我们国庆节的时候发布了beta2版。 同时发布的还有: FLEX 3.0 beta2 官方说这一版本已经基本上接近正式
- 今天学习Python的时候,需要安装一个第三方库,Python Imaging Library,是Python下面一个非常强大的处理图像的工
- 本文实例讲述了PHP global全局变量的使用与注意事项。分享给大家供大家参考,具体如下:使用global在方法里面声明外部变量为全局变量
- 这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框、单行文本、多行文本、数值等。在经常需要更换这类表单的场合,需要有一个表
- 正态分布应用最广泛的连续概率分布,其特征是“钟”形曲线。这种分布的概率密度函数为:其中,μ为均值,σ为标准差。求正态分布曲线下面积有3σ原则
- 一、数据类型分类1、按存值个数区分单个值:数字,字符串多个值(容器):列表,元组,字典,集合2、按可变不可变区分可变:列表[],字典{},集
- pygal.style的LightColorizedStyle参数 问题在《Python编程:从入门到实践》中的使用API的案例,
- 在实际工作中,无论是对数据库系统(DBMS),还是对数据库应用系统(DBAS),查询优化一直是一个热门话题。一个成功的数据库应用系统的开发,
- 前言复习试题时,发现一道复数问题问题关于 Python 的复数类型,以下选项中描述错误的是A复数的虚数部分通过后缀“J”或者“j”来表示B对
- 这个可应用于所有浏览器中.<SCRIPT language=javascript>var leave=true; functio
- php的引用(就是在变量或者函数、对象等前面加上&符号),在PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是
- 如何用php实现APP消息推送现在有很多的消息推送厂商,比如阿里云的消息推送,极光推送,融云的消息推送。他们的原理都是把sdk内置在app里
- 在进行浮动布局时,大多数人都深知,在必要的地方进行浮动清理:<div style="clear:both;">
- 功能所在位置该功能运用了django.contrib.messages这个库,再django项目中srtting.py文件中的38行,APP
- 参考: Smashing magzine翻译+整理: Demix当完成一项前端的工作之后,许多人都会忘记该项目的结构与细节。然而代码并不是马
- 这篇文章主要介绍了Python tkinter常用操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 关于 PHP 的文件操作,我们也将是通过一系列的文章来进行学习。今天我们先学习的是一个很少人使用过,甚至很多人根本不知道的扩展,它与我们日常
- 很棒的新闻发布系统分享给大家,希望大家喜欢。下面就让我们来说一说基于jsp的新闻发布系统,其中使用的技术有JavaBean、fillter、
- 1、打印九九乘法表#只打印结果for i in range(1,10): for j in range(1,i+1): &nbs
- 1 包简介1.1 工作空间go语言的工作空间必须由 bin、pkg、src三个目录组成,可以在GOPATH环境变量中添加多个工作空间,但不能