这种情况下有多少个事件循环
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')
- 输出
我正在 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')
- 输出