Utilizzando asyncio un coroutine può essere eseguita con un timeout in modo che viene cancellato dopo il timeout:pitone asyncio forza timeout
@asyncio.coroutine
def coro():
yield from asyncio.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 5))
L'esempio precedente funziona come previsto (timeout dopo 5 secondi).
Tuttavia, quando la coroutine non utilizza asyncio.sleep()
(o altre coroutine asyncio), non sembra che vada in timeout. Esempio:
@asyncio.coroutine
def coro():
import time
time.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 1))
Questo richiede più di 10 secondi per eseguire perché il time.sleep(10)
non viene annullata. È possibile far valere l'annullamento della coroutine in tal caso?
Se asyncio dovrebbe essere usato per risolvere questo, come potrei farlo?
Un altro utile esempio qui: https://github.com/calebmadrigal/asyncio-examples/blob/master/run_in_executor.py – shrx