協程中呼叫阻塞函式

2021-09-30 16:50:45 字數 728 閱讀 3006

from concurrent.futures import threadpoolexecutor

from tornado import gen

threadpool = threadpoolexecutor(2)

def mysleep(count):

import time

for i in range(count):

print(i)

time.sleep(1)

@gen.coroutine

def call_block():

print("start")

threadpool.submit(mysleep,5) #阻塞函式不會影響協程執行

# mysleep(10) #阻塞函式阻塞協程執行,阻塞函式執行完成才能繼續執行協程

# yield threadpool.submit(mysleep,5) #阻塞函式阻塞協程執行,函式執行完返回,協程不在繼續執行!

# yield mysleep(5) #end未列印

print('end')

call_block()

from concurrent.futures import threadpoolexecutor:匯入執行緒池庫

例項化了乙個有兩個執行緒的執行緒池,協程中使用threadpool.submit呼叫阻塞函式,通過yield返回,這樣不會阻塞協程的繼續執行,也保證阻塞函式順序執行!

協程通訊之認識channel 阻塞

這是go裡面的核心資料型別,有了它我們可以方便的進行協程間資料通訊。其原理 於csp模型理論,go實現了部分理論。簡單說,csp模型由併發執行的實體 如程序或執行緒 組成,實體之間通過發訊息進行通訊,其中channel承擔了實體和實體之間傳送訊息的通道。在go裡面goroutine就是實體,它裡面也...

python協程函式

例項 def menu x print welcome s to shaxian restaurant x men list while true print men list food yield men list print s start to eat s x,food g menu 張三 n...

協程函式應用

1.套模板 def init func res func args,kwargs next res return res def init func res func args,kwargs next res return res init eater init eater def eater na...