Python 如何在当前运行循环期间等待任务完成?
由于数据处理的需要,我想在Ipython笔记本中运行的当前循环中等待一组任务的结果。在Ipython笔记本中, 默认情况下,事件循环正在运行。也就是说,无论何时运行下面的代码,都会得到Python 如何在当前运行循环期间等待任务完成?,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,由于数据处理的需要,我想在Ipython笔记本中运行的当前循环中等待一组任务的结果。在Ipython笔记本中, 默认情况下,事件循环正在运行。也就是说,无论何时运行下面的代码,都会得到True import asyncio loop = asyncio.get_event_loop() loop.is_running() 您不能关闭当前循环,因为笔记本正在使用它。我在Ipython笔记本上有一些任务要做。但是如果不关闭当前循环,我就无法创建新循环。 我几乎实现了它。我就是这样做的: impor
True
import asyncio
loop = asyncio.get_event_loop()
loop.is_running()
您不能关闭当前循环,因为笔记本正在使用它。我在Ipython笔记本上有一些任务要做。但是如果不关闭当前循环,我就无法创建新循环。
我几乎实现了它。我就是这样做的:
import asyncio as aio
loop = aio.get_event_loop()
async def hello():
await aio.sleep(10)
return "hello"
tasks = []
for i in range(10):
tasks.append(loop.create_task(hello()))
# all the tasks will automatically run
rest = aio.gather(*tasks)
现在我需要做的是等待rest
完成,但是,我不能使用loop。运行\u直到\u complete
等待它完成,因为我无法关闭当前的笔记本循环
我应该怎么做才能得到结果?
谢谢 只需创建一个新的事件循环并将其设置为当前事件循环即可。我无法复制您的问题,请参见下文,因此请注意,这是未经测试的:
import asyncio as aio
loop = aio.new_event_loop()
aio.set_event_loop(loop)
然后您应该能够安全地调用循环。在不干扰默认事件循环的情况下运行_,直到_完成(rest)
详情请参见文档:
我不确定您使用的是哪个版本的IPython/Jupyter笔记本,但我无法在Mac OS High Sierra上的Jupyter笔记本4.4版或IPython 6.2.1版上重现此问题。请注意,IPython笔记本电脑长期以来一直被弃用,取而代之的是Jupyter笔记本电脑
jMatthews-MacBook-Pro:stackoverflow matt$ jupyter --version
4.4.0
Matthews-MacBook-Pro:stackoverflow matt$ ipython --version
6.2.1
例如,运行ipython
REPL时:
In [1]: import asyncio
...: loop = asyncio.get_event_loop()
...: loop.is_running()
...:
Out[1]: False
Jupyter笔记本中也有类似的输出。感谢您尝试解决此问题。事实上,我试图创建一个新的循环来实现它,但在调用
new\u loop.run\u直到它完成时失败了。错误为“RuntimeError:无法在另一个循环运行时运行事件循环”。我的Jupyter笔记本版本是5.6.0和python版本3.6.6,操作系统是win10x64。在REPL中工作正常,但在浏览器中编辑时会出现问题。我不知道为什么。python版本的输出是什么?我的python版本是python3.6.6