【发布时间】:2015-04-20 23:37:11
【问题描述】:
使用 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.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 来解决这个问题,我该怎么做?
【问题讨论】:
标签: python python-asyncio