windows下多进程加协程并发模式
2023-09-14 09:12:28 时间
好久没更新博客了。正好最近要整理一下最近这段时间做过的项目以及学习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个进程来并行协程即方法a for 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菜鸟,如果上面的代码有啥问题或者更好的建议的话,还希望大神们不吝赐教呀!
相关文章
- Windows 7 With Sp1 MSDN中文版下载
- Pycharm远程连接服务器(windows下远程修改服务器代码)[通俗易懂]
- tasklist 结束进程_使用 TASKLIST 命令查看 windows 当前运行进程
- Windows提权/杀软进程在线对比
- Windows查看端口占用情况_windows关闭端口命令
- windows 杀进程命令[通俗易懂]
- Waves 14 Complete for Windows (含激活补丁)
- Windows右下角小电脑网络连接图标异常的解决办法
- windows 安装 mysql 8.0+
- MySQL 在 Windows 系统下的安装
- RabbitMQ windows 安装
- Windows、Linux系统常用CMD命令大全
- 【Windows 逆向】OD 调试器工具 ( CE 工具通过查找访问的方式找到子弹数据基地址 | 使用 OD 工具附加游戏进程 | 在 OD 工具中查看子弹数据地址 | 推荐 )
- Windows 10 下安装 Apache 2.4.41的教程
- Windows下安装MySQL数据库系统指南(windows安装mysql)
- 在Windows系统下安装MySQL数据库(windows下安装mysql)
- Windows下安装Linux虚拟机:快速、简单、高效(windows安装linux虚拟机)
- 和windows比较Octave在Linux和Windows上的性能(octavelinux)
- 的痛苦逃离Windows:深陷Linux系统的痛苦(进linux系统)
- 的windows系统在Linux服务器上挂载Windows系统的操作步骤(linux挂载服务器上)
- Windows系统如何访问Linux共享文件夹(windows访问linux共享文件夹)
- Linux与Windows:哪个更优秀?(linux好还是windows好)
- 比较:Windows 与 Linux 的异同(windows和linux)
- Linux挂载Windows共享:实现无缝网络体验(linux挂载windows共享)
- Windows和Linux系统下perl连接SQLServer数据库的方法
- windows消息和消息队列实例详解