Korzystanie asyncio w współprogram mogą być wykonywane z timeout tak robi anulowane po timeout:Python asyncio Timeout siły
@asyncio.coroutine
def coro():
yield from asyncio.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 5))
Powyższy przykład działa zgodnie z oczekiwaniami (IT razy się po 5 sekundach).
Jednak, gdy coroutine nie używa asyncio.sleep()
(lub innych asyncio coroutines), nie wydaje się upływać czas. Przykład:
@asyncio.coroutine
def coro():
import time
time.sleep(10)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(coro(), 1))
ta trwa dłużej niż 10 sekund, aby działać, ponieważ time.sleep(10)
nie wyłącza się. Czy w takim przypadku możliwe jest egzekwowanie odwołania coroutine?
Jeśli do rozwiązania tego problemu należy zastosować asyncio, w jaki sposób mogę to zrobić?
Kolejny przydatny przykład tutaj: https://github.com/calebmadrigal/asyncio-examples/blob/master/run_in_executor.py – shrx