Sử dụng asyncio một coroutine có thể được thực hiện với một thời gian chờ để nó bị hủy bỏ sau khi thời gian chờ:Python asyncio timeout lực
@asyncio.coroutine
def coro():
yield from asyncio.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 5))
Ví dụ trên làm việc như mong đợi (nó lần ra sau 5 giây).
Tuy nhiên, khi coroutine không sử dụng asyncio.sleep()
(hoặc khác asyncio coroutines) nó dường như không hết thời gian. Ví dụ:
@asyncio.coroutine
def coro():
import time
time.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 1))
Mất hơn 10 giây để chạy vì time.sleep(10)
không bị hủy. Có thể thực thi việc hủy coroutine trong trường hợp này không?
Nếu sử dụng asyncio để giải quyết vấn đề này, tôi có thể làm như thế nào?
Một ví dụ hữu ích khác tại đây: https://github.com/calebmadrigal/asyncio-examples/blob/master/run_in_executor.py – shrx