import asyncio
import time
async def get_html(sleep_times):
print("waiting")
await asyncio.sleep(sleep_times)
print("done after {}s".format(sleep_times))
if __name__ == "__main__":
task1 = get_html(2)
task2 = get_html(3)
task3 = get_html(3)
tasks = [task1, task2, task3]
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(asyncio.wait(tasks))
except KeyboardInterrupt as e:
pass
all_tasks = asyncio.Task.all_tasks()
for task in all_tasks:
print("cancel task")
print(task.cancel())
loop.stop()
loop.run_forever()
finally:
loop.close()
老师,在您的代码中我有些不理解这个loop.stop()和loop.run_forever()。
我是这么想的,在代码运行的时候Ctrl+C终止代码会导致事件循环终止,直接进入到异常处理中,但是您在异常处理中又使用了loop.stop(),意思是Ctrl+C并不会终止事件循环是吗?后面的那个loop.run_forever()就更加不能理解了,在这里写一句这个岂不是和while True一样,一直在这里循环,怎么会去执行finally中的代码呢?感觉有点不可思议,还有就是那个Task was destroyed but it is pending!这个错误的原因我也没有排查出来,为什么会出现这个错误呢?