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返回,这样不会阻塞协程的继续执行,也保证阻塞函数顺序执行!