Python——eventlet.greenthread


  該模塊實現 eventlet 中的 “綠色線程” 即協程。

  相關的 greenlet 模塊的介紹。

  目錄

  一、模塊級函數

    sleep()

    spawn()

    

模塊級函數

  

 eventlet.greenthread.sleep(seconds=0) 

  
  在至少參數  seconds 秒后讓出控制權,參數  seconds 可以是一個整數,也可是浮點型的。當參數  seconds 為0時,主動讓出控制權,在執行長時間計算時這么做有助於讓別的協程也得到執行。
  
  eventlet.greenthread.spawn(func, *args, **kwargs) 
  
  孵化(創建)一個可以調用 func(*args, **kwargs) 的協程,返回一個 GreenThread 對象,可以使用該對象獲得調用 func(*args, **kwargs) 的返回值。
  這條指令執行后控制權立即返回給調用這個接口的函數,創建的協程只是有了調用 func(*args, **kwargs) 的能力,而不是這里一孵化,協程就會立刻調用 func(*args, **kwargs)。  spawn_after() 可以指定在一定時間后孵化一個協程。
  
  eventlet.greenthread.spawn_n(func, *args, **kwargs) 
  
  孵化(創建)一個可以調用  func(*args, **kwargs) 的協程,這里返回的協程不能獲取 func(*args, **kwargs) 的返回值或者拋出的異常,比   spawn() 更快,當沒有關鍵字參數的時候該指令運行最快。
  如果函數拋出一個異常,spawn_n 會打印堆棧軌跡,可以通過  eventlet.debug.hub_exceptions() 將這個功能關閉。
  
  eventlet.greenthread.spawn_after(seconds, func, *args, **kwargs) 
  
  參數 seconds 秒后孵化一個可以調用 func 的協程。返回一個  GreenThread 對象,可以用來獲取調用  func 的返回值。
  
  eventlet.greenthread.spawn_after_local(seconds, func, *args, **kwargs) 
  
   seconds 秒后孵化協程,如果當前的協程退出,那么函數不會被調用。 seconds 可以是整數或者浮點數,參數 func 會在自己所在的協程中執行,傳給它的參數正好是 args 和 kwargs。
  返回一個 GreenThread 對象,可以獲取 func 的返回值。
  
GreenThread 對象
  
  class eventlet.greenthread.GreenThread(parent) 
  
    GreenThread 類是 Greenlet 的子類,添加了能夠獲取主函數返回值的功能,不要直接構造 GreenThread 對象,而是用 spawn() 函數來孵化一個新的協程!
  
  cancel(*throw_args) 
  
  如果這個協程還沒有運行,等價於殺掉它,如果這個協程已經運行了,這里會等待它運行完,然后殺掉它。一旦調用過這個函數,所有的   wait() 調用都會拋出異常   throw_args  (默認為  greenlet.GreenletExit )。
  
  kill(*throw_args) 
  
  強制殺掉協程,就算協程里面的函數已經運行了也要殺掉它。一旦調用過這個函數,所有的  wait() 調用都會拋出異常  throw_args (默認為  greenlet.GreenletExit)。
  
  link(func, *curried_args, **curried_kwargs) 
  
  建立一個函數  func ,這個函數會以當前協程的結果為參數調用。
  函數  func 應該有以下這種簽名:
def func(gt, [curried args/kwargs]):

 

  當協程運行完成后,它會立刻調用  func ,將自己和   curried arguments  一起傳遞給 func 。如果 func 想要獲取協程的返回值,就應該調用第一個參數,也就是調用自己的那個協程的 wait() 方法。
   func 以調用自己的協程的上下文運行,所以有可能會干擾其他被連接的函數,比如通過顯式切換到其他的協程。
  unlink(func, *curried_args, **curried_kwargs) 
  
  移除   link() 函數設置的連接,如果成功返回 True ,否則返回  False。
  
  wait() 
  
  返回當前協程中主函數的執行結果,如果是一般的執行結果,wait() 會返回它;如果是異常,wait() 會拋出同樣的異常(但是堆棧軌跡不可避免的包含一些協程模塊中的幀)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM