我们有一个由两个c++应用程序(作为exe运行)和一个python的plot dash dashboard组成的系统。它是一个离线系统(dash在本地主机上运行),使用sqlite数据库(在WAL模式下)来存储数据并在不同组件之间进行交互。
每个c++组件都有一个打开的数据库连接,该连接通过各自的程序传递,这工作得很好。
现在我的问题是如何在python/破折号方面处理这个问题,因为我不太理解破折号(我不是破折号程序员)。
- 我将在哪里分配数据库连接对象来传递它,或者使它从不同的回调中可用。
- 在本地主机上的dash是否使用多线程进行回调等,其中应用程序中的单个数据库连接将是一个问题
- 在多线程问题的情况下:它是一个有效的解决方案,在每个回调(必要时)打开数据库连接,并在离开回调之前显式地关闭它?
最高效的方法可能是重用回调之间的连接。但是,正如您注意到的,使用这种方法时,如果使用多个线程/进程,则必须小心。一种可能的设计是使用线程本地连接池,但对于您的用例来说,这可能有些多余。打开/关闭sqlite连接的开销大约是几十微秒,因此它可能不会对性能产生太大影响。但我还是建议你试一试。
Dash使用的线程/进程数取决于底层Flask服务器的配置。如果您设置了threaded=True
,则每个请求将在单独的线程中处理。使用开发服务器,您可以直接传递参数,即
app.run_server(threaded=True)
或者,您可以通过processes=X
和X > 1
来使用多个进程。