📌  相关文章
📜  nbconvert 失败:线程 'ThreadPoolExecutor-0_0' 中没有当前事件循环 (1)

📅  最后修改于: 2023-12-03 15:17:50.650000             🧑  作者: Mango

nbconvert 失败:线程 'ThreadPoolExecutor-0_0' 中没有当前事件循环

如果您在使用 nbconvert 进行 Jupyter Notebook 转换时遇到以下错误:

RuntimeError: There is no current event loop in thread 'ThreadPoolExecutor-0_0'.

这通常是由于 nbconvert 把默认的 I/O 添加到异步循环中引起的。当线程中没有事件循环时,这就会报错。

为了解决这个问题,您可以通过将异步 I/O 附加到线程的事件循环来避免这种情况。有几种方法可以做到这一点:

1. 创建新的事件循环

您可以在需要使用异步 I/O 的线程中手动创建新的事件循环并将其设置为当前:

import asyncio

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

在调用 nbconvert 之前添加这段代码即可。

2. 添加 UVLoop

另一种方法是使用 uvloop 库来代替标准的事件循环。uvloop 是一个基于 libuv 的高性能事件循环。

您可以使用 pip 安装 uvloop

pip install uvloop

然后在需要使用异步 I/O 的线程中添加以下代码:

import uvloop
import asyncio

asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
3. 更新 nbconvert 版本

如果您使用的是过时的版本,那么升级到最新版本可能会解决此问题。

pip install nbconvert --upgrade

现在您可以重新运行 Jupyter Notebook 转换并避免线程中的当前事件循环缺失错误。