这种情况下有多少个事件循环

How many event loops in this case

我正在 Python 学习异步。有一个困惑我无法解决。

假设我有 2 个 Python 脚本:dummy1.py 和 dummy2.py。在第一个脚本中,我的代码如下所示:

loop = asyncio.get_event_loop()
loop.create_task(a_task)

第一个脚本将导入到第二个脚本中,在第二个脚本中,我将代码安排如下:

loop = asyncio.get_event_loop()
loop.run_forever()

是否创建了 2 个不同的事件循环?感谢您抽出宝贵时间!

你的例子的主要问题是你只开始了一个循环。当你第二次得到事件循环时,get_event_loop() 仍然指向同一个循环。循环还有一个挂起的任务,直到事件循环 运行.

才会开始

关于这一点需要注意的重要一点是,您只有一个线程。该线程执行可以创建任务,将事件循环保存到变量等,但是一旦您启动事件循环,该线程现在就在该事件循环上工作。代码不会继续超过您开始循环的行,直到它结束。要有多个事件循环,你基本上需要多个线程。

你可以通过这个例子看到这个播放:

  • test1.py
import asyncio

async def a_task():
    while True:
        await asyncio.sleep(5)
        print('a_task did something')

loop = asyncio.get_event_loop()
print('Got Event loop in test1.py')
loop.create_task(a_task())
print('Created task in test1.py')

  • test2.py
import asyncio
import test1

loop = asyncio.get_event_loop()
print('Got event loop in test2.py')
print('Starting Event loop in test2.py')
loop.run_forever()
print('Event loop ended')
  • 输出