对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


猜你喜欢
- 一、 了解postman1. 什么是postman?------ 软件测试用来做接口测试的工具。2. 如何下载postman--
- 本文实例讲述了Golang正整数指定规则排序算法问题。分享给大家供大家参考,具体如下:给定字符串内有很多正整数,要求对这些正整数进行排序,然
- 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下:定义了一个计算损失的函数:def error(yhat
- 读取文件时报错:xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Exp
- defineExpose要在变量和方法声明定义之后再使用,否则浏览器的控制台会输出很多警告,并且最终将该页面卡死。[Vue3] define
- 析构函数当某个对象成为垃圾或者当对象被显式销毁时执行。PHP5中提供的析构函数是__destruct,其与构造方法__construct相对
- 即使页面上只有一个元素它也是一个矩形的盒模型。其大小、位置、行为都可以通过CSS来控制。这里的行为是指当盒模型内部以及周围的内容发生变化时的
- mysql-5.7以后压缩包安装有了不小的变化,本文针对之前安装mysql5.7.18的笔记进行了总结,分享给大家第一步:到官网下载http
- 我们用pycharm写CSS的时候,是不是苦于没有提示,那么pycharm中如何显示CSS提示呢?下面小编给大家分享一下。首先点击左上角的f
- python 遍历字符串(含汉字)实例详解s = "中国china"for j in s: print j首
- 学习目标1.掌握pytorch模型转换到onnx模型2.顺利运行onnx模型3.比对onnx模型和pytorch模型的输出结果学习大纲pyt
- 昨天按照手册教程,动手写一个Auth扩展,按照包独立性的原则,我不希望将Auth::extend()这种方法写在 start.php 中,毫
- tzset()方法重置所使用的库例程的时间转换规则。环境变量TZ指定如何完成此操作。TZ环境变量的标准格式(空格为清楚起见而加的
- 西贝做了许久的交互设计工作,每年的目标都有不同,却发现今年没有什么提高和改进的地方。也许是自己没有回头总结,总是被这样那样的借口推脱。最近休
- 使用MySQL,目前你可以在三种基本数据库表格式间选择。当你创建一张表时,你可以告诉MySQL它应该对于表使用哪个表类型。MySQL将总是创
- 初学python,对python的对齐很重视,为了防止出错,使用spyder工具提供的功能下面是方法:1、首先打开Tools菜单栏下的Pre
- 目前流行的强化学习算法包括 Q-learning、SARSA、DDPG、A2C、PPO、DQN 和 TRPO。 这些算法已被用于在游戏、机器
- 这篇文章主要介绍了如何基于Python实现自动扫雷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- ASP里两种常用的生成文件的方式是:利用ADODB.Stream生成文件和利用Scripting.FileSystemObject(fso)
- numpy norm()函数求范数函数:norm(x, ord = None, axis = None, keepdims = False)