我有一個程序執行一些長時間運行的同步任務,即使其中一些任務尚未完成,也可能需要退出程序。以下是一個簡單的程序,在main()
開始這樣的任務。之後立即返回main()
,因此程序應該退出。在默認執行程序中的任務仍在運行時退出程序
import asyncio, time
def synchronous_task():
for i in range(5):
print(i)
time.sleep(1)
async def main():
loop.run_in_executor(None, synchronous_task)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
print('Main thread exiting.')
但不是運行該腳本時,我得到這樣的:
$ python3.5 test3.py
0
Main thread exiting.
1
2
3
4
什麼是處理這種情況的預期呢?事件循環的默認執行程序已經使用守護程序線程並終止程序,而不清理在我的情況下可以,但我不想使用os._exit()
。
你得到**主線程退出**,是不是你想要的? – stovfl
@stovfl不,我想處理終止。但正如你所看到的,它在主線程退出後繼續打印到控制檯。 – Feuermurmel
你想'終止/殺死''synchronous_task'。你嘗試過'loop.close()'嗎? – stovfl