協程原理:當執行線程碰見io操做時,必須等待線程執行完才能執行別的線程,因此爲了提升執行效率,有了協程。使用greenlet能夠手動切換線程,當一個greenlet碰見IO,就自動切換到別的greenlet,等到前一個線程IO操做完成在合適的時候切換過來便可。因爲IO操做很耗時,常常是程序處於等待狀態,手動切換麻煩,有了gevent爲咱們自動切換協程,就保證,總有greentlet在運行,而不是等待IO,提升了程序執行效率python
#不使用greenlet實現切換任務
import time
def work1():
while 1:
print('----work1----')
yield
time.sleep(0.4)
def work2():
while 1:
print('----work2----')
yield
time.sleep(0.4)
def main():
w1=work1()
w2=work2()
while 1:
next(w1)
next(w2)
if __name__ == '__main__':
main()
# 使用greenlet模塊實現切換任務
from greenlet import greenlet
import time
def work1():
while 1:
print('---A-----')
gr2.switch()
time.sleep(0.5)
def work2():
while 1:
print('---B-----')
gr1.switch()
time.sleep(0.5)
gr1=greenlet(work1)
gr2=greenlet(work2)
gr1.switch()
# gevent的使用
import gevent
def foo():
print('running in foo')
gevent.sleep(2)
print('come back from bar in to foo')
def bar():
print('running in bar')
gevent.sleep(2)
print('come back from foo in to bar')
gevent.joinall([
gevent.spawn(foo),
gevent.spawn(bar),
])