使用asyncio可以在超时时执行协程,以便在超时后取消:
@asyncio.coroutine
def coro():
yield from asyncio.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 5))
上面的示例按预期工作(它在5秒后超时).
但是,当协同程序不使用asyncio.sleep()(或其他asyncio协程)时,它似乎没有超时.例:
@asyncio.coroutine
def coro():
import time
time.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 1))
这需要超过10秒才能运行,因为time.sleep(10)未被取消.在这种情况下是否可以强制取消协程?
如果应该使用asyncio来解决这个问题,我该怎么做?