def future_with_timeout(loop, timeout, future=None):
loop = loop or asyncio.get_event_loop()
f = future or create_future(loop=loop)
def on_timeout():
if f.done():
return
f.set_exception(TimeoutError)
if timeout:
handler = loop.call_later(timeout, on_timeout)
def on_result(*_):
with suppress(Exception):
handler.cancel()
f.add_done_callback(on_result)
return f
评论列表
文章目录