协程中调用阻塞函数

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

猜你喜欢

转载自blog.csdn.net/weixin_42694291/article/details/83826647