Gevent:

Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。在greenlet 中用switch调度。

例子1:

import gevent

def foo():
print('Running in foo')
gevent.sleep(2) #遇到sleep会被切换走
print('Explicit context switch to foo again') def bar():
print('Explicit context to bar')
gevent.sleep(1) #又切换到上面,来回切换,直到sleep(1)结束。
print('Implicit context switch back to bar') gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),]) #列表的形式启动2个协程

运行结果:

Running in foo
Explicit context to bar
Implicit context switch back to bar
Explicit context switch to foo again

例子2:

import gevent

def foo():
print('Running in foo')
gevent.sleep(2)
print('Explicit context switch to foo again') def bar():
print('Explicit context to bar')
gevent.sleep(1)
print('Implicit context switch back to bar') def func3():
print('running in func3')
gevent.sleep(0) #没有卡住,但是会触发一次切换
print('running in func3 again') gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),gevent.spawn(func3)]) #列表的形式启动2个协程

运行结果:三个之间来回切换foo-->bar--->func3,总共需要花费2s。哪个快就先执行完哪个。

C:\abccdxddd\Oldboy\python-3.5.2-embed-amd64\python.exe C:/abccdxddd/Oldboy/Py_Exercise/Day10/自动io切换.py
Running in foo
Explicit context to bar
running in func3
running in func3 again
Implicit context switch back to bar
Explicit context switch to foo again

最新文章

  1. JVM内存监控工具 Jvisualvm
  2. 【原】Configuring Oracle Data Guard In Physical Standby Database
  3. C#获取根目录的方法集合
  4. QTableView另类打印解决方案(复用render函数去解决print问题)
  5. ARM体系结构与编程
  6. linux文件分割(将大的日志文件分割成小的)【转载】
  7. .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态
  8. 【LOJ2542】【PKUWC 2018】随机游走 min-max容斥 树上高斯消元
  9. Linux开始结束ping命令
  10. Java并发编程-再谈 AbstractQueuedSynchronizer 1 :独占模式
  11. LCD显示异常分析——撕裂(tear effect)【转】
  12. Linux centOS Ubuntu --- 使用systemctl添加开机启动
  13. day32
  14. RichEdit控件 SDK 参考手册
  15. 在laravel之外使用eloquent
  16. Codeforces768C Jon Snow and his Favourite Number 2017-02-21 22:24 130人阅读 评论(0) 收藏
  17. MS EXCEL2013添加Oracle Web ADI菜单
  18. Objective C Protocol implementation
  19. c语言-猜生日算法
  20. [Erlang]Erlang经常使用工具解说

热门文章

  1. 成都Uber优步司机奖励政策(3月9日)
  2. MyBatis-参数处理
  3. 【完美解决】Spark-SQL、Hive多 Metastore、多后端、多库
  4. 【vps搬家】--总结--费元星
  5. Linux 7.4配置VSFTP服务器
  6. webpack中Development和Production模式的区分打包
  7. 多台服务器下同步文件夹数据(rsync+inotify)
  8. jdbc 连接各种数据库
  9. Python列表操作大全(非常全)
  10. leetcode-单词探索