我正在做一个在线法官。我正在使用 python 2.7 和 Mysql(因为我正在做后端部分)
我的方法:
我创建了一个主线程,它从数据库中提取提交(一次 10 个)并将它们放入队列中。然后我有多个线程从队列中获取提交,对其进行评估并将结果写回数据库。
现在我有一些疑问(我知道它们是来自不同主题的疑问,但对其中一些问题的处理方法也受到高度赞赏)。
- 目前,当我启动线程时,我会为它们提供它们自己的数据库连接,供它们使用。为每个线程提供一个连接是一种好习惯吗?在线程之间共享连接是否会产生问题。我该如何解决这个问题。
- 我的主线程使用单个连接,因为它唯一的工作是从数据库中提取提交,然后放入队列(还将它们在数据库中的状态更新为评估提交)。但有时我会收到错误消息:
Lost connection to Mysql server
while querying。即使我停止程序并重新启动它,我仍然会收到它。我该怎么办?我还应该只为主线程实现一个连接池吗? - 另外,数据库连接是否永远保持事件状态?当它的 session 内存等耗尽时该怎么办?如何处理?
最佳答案
使用连接池。共享数据库连接并不总是坏事,但您必须小心。您可以尝试使用 SQLAlchemy 来为您管理这些:http://docs.sqlalchemy.org/en/rel_0_8/orm/session.html#unitofwork-contextual
服务器可能没有连接,您的连接可能因为使用太多资源而被终止......等等。连接池可以帮助您解决这个问题。
这一切都取决于,理论上它可以无限期地存活,但通常你会在某个地方超时。
关于python - 如何管理数据库连接,尤其是在多线程的情况下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392223/