1. 程式人生 > >python協程的簡單了解

python協程的簡單了解

code com pip 效果 while st2 英文 sleep from

協程:

  協程,又稱微線程,纖程。英文名Coroutine。

   可以在不同的函數間切換,而且切換的次數和時間都是由用戶自己確定的。

  協程的幾種實現方式:

    (1)使用生成器yield實現。 如果不了解生成器可以閱讀我的另一篇文章:python生成器的簡單理解

     下面就來寫一個簡單的協程程序。

 1 import time
 2 def test1():
 3     while True:
 4         print("1")
 5         yield None
 6 def test2():
 7     while True:
 8         print
("2") 9 yield None 10 if __name__ == __main__: 11 while True: 12 next(test1()) 13 time.sleep(2) 14 next(test2()) 15 time.sleep(2)

   這段代碼的執行效果就是交替輸出1,2。為什麽會出現這種情況呢?了解過生成器你就會知道如果在一段代碼的執行過程中遇到了yield,那麽函數就會結束執行,直到下一次再次調用next。所以你看到下面的圖片就知道為什麽會出現1,2交替輸出的情況了。這就是協程。

技術分享圖片

     (2)greenlet

     greenlet模塊需要下載 pip install greenlen  

 1 from greenlet import greenlet
 2 import time
 3 def test1():
 4     while True:
 5         print("1")
 6         g2.switch()
 7         time.sleep(2)
 8 def test2():
 9     while True:
10         print("2")
11         g1.switch()
12         time.sleep(2)
13 g1 = greenlet(test1) 14 g2 = greenlet(test2) 15 g1.switch()

       (3)gevent 同樣gevent需要下載

 1 import gevent
 2 def f(n):
 3     for i in range(n):
 4         print(i)
 5 g1 = gevent.spawn(f, 5)
 6 g2 = gevent.spawn(f, 5)
 7 g3 = gevent.spawn(f, 5)
 8 g1.join()
 9 g2.join()
10 g3.join()

    gevent的強大之處是他不需要人工切換,能夠自動切換,而且他還有很多強大的功能,這裏就不一一列舉了,想更深了解可以去網上找關於gevent專門的文章。

python協程的簡單了解