使用asyncio,协程可以执行超时操作,因此在超时后它会被取消:
使用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解决这个问题,我该怎么做?