协程中调用阻塞函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值