从 plotly dash 中的不同回调访问 sqlite 数据库 (python)
Access sqlite database from different callbacks in plotly dash (python)
我们有一个由两个 c++ 应用程序(运行 作为 exe)和 python 中的 plotly dash 仪表板组成的系统。它是一个离线系统(本地主机上的破折号 运行),使用 sqlite 数据库(在 WAL 模式下)存储数据并在不同组件之间进行交互。
每个 C++ 组件都有一个打开的数据库连接,该连接通过相应的程序传递,这工作正常。
现在我的问题是如何在 python/dash 方面处理这个问题,因为我对 dash 的理解不够(我不是 dash 程序员)。
- 我将在哪个位置分配数据库连接对象以传递它或使其可用于不同的回调。
- 本地主机上的 dash 是否为其回调等使用多线程,而应用程序中的单个数据库连接会成为问题
- 如果出现多线程问题:在每个回调中打开数据库连接(必要时)并在离开回调之前显式关闭它是否是一个有效的解决方案?
最高效的方法可能是重用回调之间的连接。但是,正如您所注意到的,使用这种方法时,如果您使用多个 threads/processes,则必须小心。一种可能的设计是使用线程本地连接池,但对于您的用例来说可能有点矫枉过正。 opening/closing 一个 sqlite 连接的开销约为 tens of micro seconds,因此它可能不会对性能产生太大影响。但我建议您对其进行测试。
Dash 使用的 threads/processes 数量取决于 。如果设置 threaded=True
,每个请求将在单独的线程中处理。使用开发服务器,可以直接传参,即
app.run_server(threaded=True)
或者,您可以通过 processes=X
和 X > 1
来使用多个进程。
我们有一个由两个 c++ 应用程序(运行 作为 exe)和 python 中的 plotly dash 仪表板组成的系统。它是一个离线系统(本地主机上的破折号 运行),使用 sqlite 数据库(在 WAL 模式下)存储数据并在不同组件之间进行交互。
每个 C++ 组件都有一个打开的数据库连接,该连接通过相应的程序传递,这工作正常。
现在我的问题是如何在 python/dash 方面处理这个问题,因为我对 dash 的理解不够(我不是 dash 程序员)。
- 我将在哪个位置分配数据库连接对象以传递它或使其可用于不同的回调。
- 本地主机上的 dash 是否为其回调等使用多线程,而应用程序中的单个数据库连接会成为问题
- 如果出现多线程问题:在每个回调中打开数据库连接(必要时)并在离开回调之前显式关闭它是否是一个有效的解决方案?
最高效的方法可能是重用回调之间的连接。但是,正如您所注意到的,使用这种方法时,如果您使用多个 threads/processes,则必须小心。一种可能的设计是使用线程本地连接池,但对于您的用例来说可能有点矫枉过正。 opening/closing 一个 sqlite 连接的开销约为 tens of micro seconds,因此它可能不会对性能产生太大影响。但我建议您对其进行测试。
Dash 使用的 threads/processes 数量取决于 threaded=True
,每个请求将在单独的线程中处理。使用开发服务器,可以直接传参,即
app.run_server(threaded=True)
或者,您可以通过 processes=X
和 X > 1
来使用多个进程。