Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在当前运行循环期间等待任务完成?_Python_Python 3.x_Python Asyncio - Fatal编程技术网

Python 如何在当前运行循环期间等待任务完成?

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

由于数据处理的需要,我想在Ipython笔记本中运行的当前循环中等待一组任务的结果。在Ipython笔记本中, 默认情况下,事件循环正在运行。也就是说,无论何时运行下面的代码,都会得到
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