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---

results matching ""

    No results matching ""