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