好久没更新博客了。正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得。如标题所示,今天就来说说windows下多进程加协程并发模式。其实网上还是蛮多在linux下的多进程加协程并发模式,本身linux对python的支持更好吧。但是由于本人的开发环境是windows的,而且网上关于这方面的资料还是少了一点,不过经过一番折腾,也算是弄出来了。废话不多说,先贴代码吧:

# coding=utf-8
# windows下多进程加协程并发模式
# 打入gevent的monkey补丁
from gevent import monkey
monkey.patch_all()
# 导入协程池
from gevent.pool import Pool
import urllib2
# 导入多进程模块
import multiprocessing
import time
# 定义一个爬取微博网页的方法
def html(url=u'http://weibo.com/'):# 用上多进程的锁机制,用于防止连续打印lock = multiprocessing.Lock()try:h = urllib2.urlopen(url).read()except:lock.acquire()print u'连接错误'lock.release()else:lock.acquire()print u'done'lock.release()# 定义一个协程并发方法(用的是gevent的协程池)
def a(num):pool = Pool(100)# 协程池的map方法可以让你自定义并发次数,这里可以自定义爬取微博网页的并发次数,第一个参数是要执行的函数# 第二个参数可以理解成需要并发参数的次数pool.map(html, [u'http://weibo.com/' for i in xrange(num)])pool.kill()pool.join()# 这个是比较关键的一个方法,就是协程加多进程的并发模式
def b(num):t = []# 建立10个进程来并行协程即方法afor i in xrange(10):p = multiprocessing.Process(target=a, args=(num,))p.start()t.append(p)for each in t:each.join()# 对比多进程加协程与纯粹协程的各自的并发状态
if __name__ == '__main__':print u'方法b开始计时:'start = time.time()b(10)print u'方法b总共花费%f秒' % (time.time() - start)print u'方法a开始计时:'start = time.time()a(100)print u'方法a总共花费%f秒' % (time.time() - start)

上面的代码注释的挺清楚的了,下面贴一下执行的结果吧:

从上面的结果可以看到,执行协程加多进程的方法b时,多核cpu是可以被充分利用的,这是单纯使用协程方式无法做到的,这也是多进程的一大好处吧。由于我这里实验的是100次并发,所以其实就效果来说还不是很明显,但是当你要瞬时并发一千个或者一万个的时候,差距就可以显现出来了,显然,协程加多进程的方式是更加牛叉的,这种模式充分把两者的优点结合起来了。

  这里如果读者对python的协程模块与多进程模块不熟悉的话,还是自行百度一下吧。毕竟自己真正理解了才是自己的东西啊。其实我也还是个python菜鸟,如果上面的代码有啥问题或者更好的建议的话,还希望大神们不吝赐教呀!

转载于:https://www.cnblogs.com/ExMan/p/10165754.html

windows下多进程加协程并发模式相关推荐

  1. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发

    多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...

  2. python:一文搞懂多线程,多进程,异步协程的使用场景

    本文将使用场景化为案例,将单线程,多线程,多进程,异步协程的速度进行对比 对比速度时,   >表示 速度快于  >>表示速度远快于  =表示速度差不多 >>>> ...

  3. python 协程并发

    # 协程并发 import gevent from gevent import monkey monkey.patch_all() from socket import * from time imp ...

  4. 开多线程出现importerror_那些年让你迷惑的并行、并发、多线程、多进程、协程...

    之前在学习操作系统的时候总是很迷惑,前几天前辈分享了这篇文章,总结比较后,还是让思路比较清晰,值得一看.于是联系作者,转载过来,和大家一起分享,一起进步! 认真把这些概念的关系梳理清楚,绝对是一件打根 ...

  5. python3多进程 进程池 协程并发

    一.进程 我们电脑的应用程序,都是进程,进程是资源分配的单位.进程切换需要的资源最大,效率低. 进程之间相互独立 cpu密集的时候适合用多进程 #多进程并发 import multiprocessin ...

  6. python gevent模块 下载_Python中的多任务,并行,并发,多线程,多进程,协程区别...

    多任务 CPU承担了所有的计算任务.一个CPU在一个时间切片里只能运行一个程序.当我们想同时运行多于一个程序的时候,就是多任务,例如同时运行微信,QQ,浏览器等等.多任务的目的是提升程序的执行效率,更 ...

  7. C++20 模式下将启用协程支持 CC 11

    GCC 10 在 C++20 模式(std=c++20) 中运行时,默认情况下会启用 C++ 协程.而将于明年发布的 GCC 11 在 C++20 推出时将具有协程功能,到那时,GNU 编译器集合中支 ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

  9. 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...

    1.多进程实现方式(类似于多线程) 1 import multiprocessing 2 import time,threading 3 4 def thread_run():#定义一个线程函数 5 ...

最新文章

  1. linux文件自动删除,自动删除文件脚本(Linux shell脚本)
  2. 工作七年后,我梳理了自己的产品工作流程
  3. Java / 常见名词含义
  4. Apache ServiceComb
  5. Java为什么能跨平台运行
  6. tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?
  7. IDEA SpringBoot工程配置热部署
  8. 谷歌账号 (亲测有效)
  9. Flash 芯片类型介绍
  10. R语言绘图及检验——正态分布曲线
  11. 服务器机柜与网络机柜
  12. Adobe photo shop 裁剪某个图层中图片的大小
  13. 可视化框架、Axure原型、大屏可视化、图表组件、图表元件库、统计图表、数据可视化模板、条形图、折线图、散点图、时间轴、仪表盘、饼图、散点图、雷达图、高山图、登录模板、弹窗、弹幕、预警、散点图
  14. Qt在mac上的字体
  15. 基于51单片机的DS12C887电子钟万年历带农历温度
  16. vs用html制作表格,演练:在 Visual Web Developer 中编辑 HTML 表格
  17. CODESYS Automation Server Connector
  18. (4.2万字,重启2020)“从零到部署”Vue全栈电商应用系列教程---正式完结
  19. 商品搜索引擎资料整理
  20. 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)

热门文章

  1. Centos 6.0/ Nginx 安装与配置
  2. 遇到的问题锦集及解决方案
  3. 高性能服务器架构思路(五)——分布式缓存
  4. java Servlet Filter 拦截Ajax请求,统一处理session超时的问题
  5. TypeScript Type Innference(类型推断)
  6. 数据导入HBase最常用的三种方式及实践分析
  7. linux下c中嵌套正则表达式
  8. springboot启动出错,
  9. 再获“国资”加持,车置宝获南京银行2亿债权融资支持...
  10. Unity3D Image 组件附入图片问题