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


Posted in Python onOctober 28, 2019

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

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

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实现通过队列完成进程间的多任务功能示例

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

Python 相关文章推荐
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
python实现SMTP邮件发送功能
Jun 16 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
python调用其他文件函数或类的示例
Jul 16 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python读取表格类型文件代码实例
Feb 17 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 #Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 #Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 #Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 #Python
Python SELENIUM上传文件或图片实现过程
Oct 28 #Python
PYTHON实现SIGN签名的过程解析
Oct 28 #Python
Python爬虫使用代理IP的实现
Oct 27 #Python
You might like
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
让PHP支持页面回退的两种方法
2008/01/10 PHP
使用PHP的日期与时间函数技巧
2008/04/24 PHP
mysql总结之explain
2012/02/27 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
vue移动端弹框组件的实例
2018/09/25 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
Django 外键的使用方法详解
2019/07/19 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
合作协议书范本
2014/10/25 职场文书
先进典型事迹材料
2014/12/29 职场文书
挂靠协议书
2015/01/27 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
Vue的过滤器你真了解吗
2022/02/24 Vue.js
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏