运行代码时,报错cannot schedule new futures after shutdown
时间: 2024-02-20 07:02:19 浏览: 707
这个错误通常是由于在 asyncio 事件循环结束后尝试调度新的协程任务导致的。在 asyncio 处理完所有任务后,会自动关闭事件循环,此时如果再尝试调度新的任务,就会报错 `cannot schedule new futures after shutdown`。
解决办法是在调用 `asyncio.run()` 函数之前,使用 `asyncio.set_event_loop()` 方法设置一个新的事件循环对象,避免使用默认的事件循环。
例如,在以下代码中,如果 `asyncio.run()` 函数之前没有设置事件循环对象,就会报错 `cannot schedule new futures after shutdown`:
```python
import asyncio
async def my_coroutine():
await asyncio.sleep(1)
print('Coroutine finished')
asyncio.run(my_coroutine())
asyncio.run(my_coroutine()) # 会报错:cannot schedule new futures after shutdown
```
为了避免这个错误,可以使用以下代码:
```python
import asyncio
async def my_coroutine():
await asyncio.sleep(1)
print('Coroutine finished')
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(my_coroutine())
loop.run_until_complete(my_coroutine()) # 不会报错
loop.close()
```
在这个例子中,我们首先创建了一个新的事件循环对象,并使用 `asyncio.set_event_loop()` 方法设置为默认的事件循环对象。然后使用 `loop.run_until_complete()` 方法运行协程任务,最后关闭事件循环。这样即可避免报错 `cannot schedule new futures after shutdown`。
阅读全文