併發編程

進程

線程

協程

協程原理:當執行線程碰見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),
])
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息