çıkmayacaktır programa asyncio iki asyncio görevlerle bir asyncio/Python program var: daha uzayıp gider Python
- tane.
import asyncio
import time
def infinite_while():
while True:
time.sleep(1)
async def task_1():
await asyncio.sleep(1)
assert False
async def task_2():
loop = asyncio.get_event_loop()
await loop.run_in_executor(None, lambda: infinite_while())
loop = asyncio.get_event_loop()
asyncio.set_event_loop(loop)
tasks = asyncio.gather(task_2(), task_1())
try:
loop.run_until_complete(tasks)
except (Exception, KeyboardInterrupt) as e:
print('ERROR', str(e))
exit()
O HATA yazdırır ama çıkış yok. elle kapalı olduğunda, program aşağıdaki yığın izleme yazdırır: İstisna bir görevde yükseldi
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 39, in _python_exit
t.join()
File "/usr/lib/python3.5/threading.py", line 1054, in join
self._wait_for_tstate_lock()
File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock
elif lock.acquire(block, timeout):
KeyboardInterrupt
Eğer kooperatif çıkarken denediniz mi? Muhtemelen istediğin gibi değil, en azından bir deney olarak, şunları yapabilirsin: 'infinite_while' içindeki döngüyü 'exit_requested' olmasa bile değiştirebilirsin; savı istisnasını yakalamak, bayrağı ayarlamak ve yeniden yönlendirmek için 'task_1' değiştir; ve her bir görev çıktıktan sonra çıkış() öğesinin tamamlanıp tamamlanmadığını, onaylama istisnasıyla normal ve bir tane olup olmadığına bakın. –
Teşekkürler, işe yarıyor, son çare olarak kullanacak ama onu çözmek için daha temiz bir yol olduğunu umuyoruz. – MrJ