greenlet
相较于yield来说greenlet更加友好,代码可读性更高,同时greenlet是用C是实现的,所以性能会更好一点(未经测试)
code
root@iZ947mgy3c5Z:/prodata/scripts# cat greenlet_test.py
import time
from greenlet import greenlet
def test1():
while True:
print('[{}]---test1 before switch---'.format(time.strftime('%Y-%m-%d %H:%M:%S')))
gr2.switch()
print('[{}]---test1 after switch---'.format(time.strftime('%Y-%m-%d %H:%M:%S')))
time.sleep(0.5)
def test2():
while True:
print('[{}]---test2 before switch---'.format(time.strftime('%Y-%m-%d %H:%M:%S')))
gr1.switch()
print('[{}]---test2 after switch---'.format(time.strftime('%Y-%m-%d %H:%M:%S')))
time.sleep(0.5)
if __name__ == '__main__':
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()
执行效果
root@iZ947mgy3c5Z:/prodata/scripts# python3.5 greenlet_test.py
[2018-01-25 09:21:58]---test1 before switch---
[2018-01-25 09:21:58]---test2 before switch---
[2018-01-25 09:21:58]---test1 after switch---
[2018-01-25 09:21:59]---test1 before switch---
[2018-01-25 09:21:59]---test2 after switch---
[2018-01-25 09:21:59]---test2 before switch---
[2018-01-25 09:21:59]---test1 after switch---
[2018-01-25 09:22:00]---test1 before switch---
[2018-01-25 09:22:00]---test2 after switch---
[2018-01-25 09:22:00]---test2 before switch---
[2018-01-25 09:22:00]---test1 after switch---
[2018-01-25 09:22:01]---test1 before switch---
[2018-01-25 09:22:01]---test2 after switch---
[2018-01-25 09:22:01]---test2 before switch---
[2018-01-25 09:22:01]---test1 after switch---