python实现通过队列完成进程间的多任务功能示例
作者:独听钟声晚 时间:2022-06-25 03:49:27
本文实例讲述了python实现通过队列完成进程间的多任务功能。分享给大家供大家参考,具体如下:
1.通过队列完成进程间的多任务
import multiprocessing
def download_data(q):
"""下载数据"""
# 模拟从网上下载数据
data = [11, 22, 33, 44]
# 向队列中写入数据
for temp in data:
q.put(temp)
print("----数据下载完成并且已存入队列----")
def analysis_data(q):
"""数据处理"""
waitting_analysis_data = list()
# 从队列中获取数据
while True:
data = q.get()
waitting_analysis_data.append(data)
if q.empty():
break
print(waitting_analysis_data)
def main():
# 1.创建一个队列
q = multiprocessing.Queue()
q1 = multiprocessing.Process(target=download_data, args=(q,))
q2 = multiprocessing.Process(target=analysis_data, args=(q,))
q1.start()
q2.start()
if __name__ == '__main__':
main()
2.进程池pool
在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程也需要消耗时间。第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。因此我们不能无限制的根据任务开启或者结束进程。那么我们要怎么做呢?
在这里,要给大家介绍一个进程池的概念,定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务,等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务。如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。也就是说,池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行。这样不会增加操作系统的调度难度,还节省了开闭进程的时间,也一定程度上能够实现并发效果。
案例:
from multiprocessing import Pool
import os, time, random
def worker(msg):
t_start = time.time()
print("进程%s开始执行,进程号为%d" % (msg, os.getpid()))
# random.random()随机生成0-1之间的浮点数
time.sleep(random.random()*2)
t_stop = time.time()
print("进程",msg,"执行完成,耗时%0.2f" % (t_stop-t_start))
def main():
# 定义一个进程池,最大进程数为3
po = Pool(3)
for i in range(10):
# Pool().apply_async(要调用的目标,(传递给目标的参数元组,))
# 每次循环将会用空闲出来的子进程去调用目标
po.apply_async(worker,(i,))
print("----start----")
# 关闭进程池,关闭后po不再接受新的请求
po.close()
# 等待po中所有子进程执行完成,必须放在close语句之后
po.join()
print("----end----")
if __name__ == '__main__':
main()
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/weixin_44321116/article/details/97243803
标签:python,队列,进程,多任务


猜你喜欢
Python tkinter 列表框Listbox属性详情
2023-09-16 14:06:26

python: 自动安装缺失库文件的方法
2023-08-30 05:42:38
Python使用JSON库解析JSON数据的方法
2021-09-24 13:35:10

解决MySQL安装重装时出现could not start the service mysql error:0问题的方法
2024-01-23 01:17:00
asp 根据IP地址自动判断转向分站的代码
2011-04-14 10:51:00
opencv-python 提取sift特征并匹配的实例
2022-01-25 03:43:18
垂直对齐:vertical-align属性
2008-07-11 20:55:00

图片滤镜效果[IE Only]
2009-06-14 19:49:00
使用Python实现跳一跳自动跳跃功能
2023-04-07 01:57:55

关于《回访确认》的几个问题
2009-08-24 12:43:00
Django集成MongoDB实现过程解析
2022-07-10 03:32:35
如何使用postman(新手入门)
2023-07-15 11:56:46

Python数据分析应用之Matplotlib数据可视化详情
2023-08-28 07:15:31

科学知识:时间复杂度计算方法
2023-09-18 21:42:28
对python中的logger模块全面讲解
2021-01-17 00:49:17
Django与DRF结合的全局异常处理方案详解
2021-05-19 22:53:16
Git在Windows中安装与使用教程
2023-11-01 08:47:55

Python合并pdf文件的工具
2021-09-09 23:28:47

Eclipse配置python默认头过程图解
2022-03-11 10:52:59

浅析JavaScript对象转换成原始值
2023-08-05 02:09:11