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时间整形转标准格式的示例分享
Feb 14 Python
Python实现过滤单个Android程序日志脚本分享
Jan 16 Python
python实现简单ftp客户端的方法
Jun 28 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
python 中random模块的常用方法总结
Jul 08 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
python实现图片文件批量重命名
Mar 23 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
Python面向对象封装操作案例详解
Dec 31 Python
django queryset相加和筛选教程
May 18 Python
详解python3 GUI刷屏器(附源码)
Feb 18 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
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
Python中的枚举类型示例介绍
2019/01/09 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
合同补充协议书
2016/03/24 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python