python多进程任务队列_python实现通过队列完成进程间的多任务功能示例

本文实例讲述了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()

0326595cec3dca4ddb9d859a8cffdb20.png

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()

ca64468585249373ed51ab57b8c1f818.png

希望本文所述对大家Python程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值