python多进程执行方法apply_async使用说明
作者:yyyyyyyyyyang 发布时间:2023-01-31 11:56:10
apply_async简介
python在同一个线程中多次执行同一方法时,该方法执行耗时较长且每次执行过程及结果互不影响,如果只在主进程中执行,效率会很低,因此使用multiprocessing.Pool(processes=n)及其apply_async()方法提高程序执行的并行度从而提高程序的执行效率,其中processes=n为程序并行执行的进程数。
apply_async使用简明代码
import multiprocessing
#method为多次调用的方法
def method(param):
pass
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=5)
params= ['param1', 'param2', 'param3', 'param4', 'param5']
for param in params:
pool.apply_async(method, args=(param, ))
pool.close()
使用总结:
apply_async是异步非阻塞式,不用等待当前进程执行完毕,随时跟进操作系统调度来进行进程切换,即多个进程并行执行,提高程序的执行效率。
补充:记录python multiprocessing Pool的map和apply_async方法
遇到的问题
在学习python多进程时,进程上运行的方法接收多个参数和多个结果时遇到了问题,现在经过学习在这里总结一下
Pool.map()多参数任务
在给map方法传入带多个参数的方法不能达到预期的效果,像下面这样
def job(x ,y):
return x * y
if __name__ == "__main__":
pool = multiprocessing.Pool()
res = pool.map(job, 2, 3)
print res
所以只能通过对有多个参数的方法进行封装,在进程中运行封装后的方法如下
def job(x ,y):
return x * y
def job1(z):
return job(z[0], z[1])
if __name__ == "__main__":
pool = multiprocessing.Pool()
res = pool.map(job1, [(2, 3), (3, 4)])
print res
这样就能达到传递多个参数的效果
ps:如果需要得到多个结果可以传入多个元组在一个列表中
Pool.apply_async()输出多个迭代结果
在使用apply_async()方法接收多个参数的方法时,在任务方法中正常定义多个参数,参数以元组形式传入即可
但是给apply_async()方法传入多个值获取多个迭代结果时就会报错,因为该方法只能接收一个值,所以可以将该方法放入一个列表生成式中,如下
def job(x):
return x * x
if __name__ == "__main__":
pool multiprocessing.Pool()
res = [pool.apply_async(target=job, (i,)) for i in range(3)]
print [r.get() for r in res]
python 3中提供了starmap和startmap_async两个方法
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/weixin_42764612/article/details/89535848


猜你喜欢
- 知识点简单的装饰器带有参数的装饰器带有自定义参数的装饰器类装饰器装饰器嵌套@functools.wrap装饰器使用基础使用简单的装饰器def
- 前言在学习操作系统的时候,我们应该都学习过临界区、互斥锁这些概念,用于在并发环境下保证状态的正确性。比如在秒杀时,100 个用户同时抢 10
- 本文实例讲述了Python3.4解释器用法。分享给大家供大家参考,具体如下:Linux/Unix的系统上,Python解释器通常被安装在 /
- 通过web框架搭建一个最简易的程序:第一步:新建一个web框架程序通过CMD进入到想要创建web程序的文件夹数据命令django-admin
- 一、局部变量1 定义在{}里面的变量时局部变量,只能在{}里面有效2 执行到定义的那句话,开始分配内存空间,离开作用域自动进行释放3 作用域
- 前言事情是这样的,昨天去表弟家,用了下他的电脑,不小心点到了他硬盘里隐藏的秘密,本来我只需要用几分钟电脑的,害得我硬是在电脑旁坐了几个小时~
- 1 将文件保存到服务器本地upload.html<!DOCTYPE html><html lang="en&qu
- CSS写法:overflow-y:visible本代码适用平台:IE6,IE7演示:<textarea style="wid
- 1.创建带有缺失值的数据库:import pandas as pdimport numpy as npdf = pd.DataFrame(n
- 使用conda和pip批量安装Python包在debug Yolov5之前,需要按照其txt文件中指定的包的版本来指定安装工程需要的Pyth
- python 字符串替换 是python 操作字符串的时候经常会碰到的问题,这里简单介绍下字符串替换方法。python 字符串替换可以用2种
- 阅读前:Pro Javascript Techniques翻译连载说明和目录JavaScript的演化是渐进而稳固的。历经过去十年的进程,J
- 函数的参数:Python中函数定义非常简单,由于函数参数的存在,使函数变得非常灵活应用广泛;不但使得函数能够处理复杂多变的参数,还能简化函数
- 直接搭建网络必须与torchvision自带的网络的权重也就是pth文件的结构、尺寸和变量命名完全一致,否则无法加载权重文件。此时可比较2个
- 一、前置基础1. go 函数基础在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。func 函数名
- 在学习和使用各种数据库的过程中,我们常常会遇到聚族索引、非聚族索引、组合索引的概念,这些索引对我们使用数据库,特别是查询的速度的
- 0. 简介传统的并发编程模型是基于线程和共享内存的同步访问控制的,共享数据受锁的保护,线程将争夺这些锁以访问数据。通常而言,使用线程安全的数
- 实例 1基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。/AAA选择根
- Request Payload 和 Form Data 请求头上的参数差别在于:Content-TypeForm DataPost表单请求代
- 前言相信各位一定有收到过这样的群发短信,据说还被归类为玩转微信的五大技巧之一╮(╯▽╰)╭但,其实,只要跑一下脚本,就轻松找出删除自己的好友