2

我正在做一名在线法官。我正在使用 python 2.7 和 Mysql(因为我正在处理后端部分)

我的方法:

我创建了一个主线程,它从数据库中提取提交(一次 10 个)并将它们放入队列中。然后我有多个线程从队列中获取提交,对其进行评估并将结果写回数据库。

现在我有一些疑问(我知道它们是来自不同主题的疑问,但对其中一些问题的处理也受到高度赞赏)。

  1. 目前,当我启动线程时,我给他们自己的数据库连接,他们使用。这是为每个线程提供一个连接的好习惯。线程之间的连接共享是否会产生问题。我该怎么做。
  2. 我的主线程使用单个连接,因为它唯一的工作是从数据库中提取提交然后放入队列中(还将它们在数据库中的状态更新为评估提交)。但有时我会收到错误:Lost connection to Mysql server查询时。即使我停止程序并重新启动它,我仍然得到它。我该怎么办?我还应该为主线程实现一个连接池吗?
  3. 数据库连接是否也永远存在?当其会话内存等耗尽时该怎么办如何处理?
4

2 回答 2

4
  1. 使用连接池。共享数据库连接并不总是坏事,但你必须小心。您可以尝试 SQLAlchemy 为您管理很多这样的事情: http: //docs.sqlalchemy.org/en/rel_0_8/orm/session.html#unitofwork-contextual

  2. 服务器可能没有连接,您的连接可能已被终止,因为它使用了太多资源......等等。连接池可以帮助您解决这个问题。

  3. 这一切都取决于,理论上它可以无限期地存活,但通常你会在某个地方超时。

于 2013-06-30T17:12:31.320 回答
2
  1. 如果您为每个线程提供相同的连接,那么线程将无法查询数据库并且会发生竞争条件。因此,您需要为每个线程提供单独的连接,这确实是个好主意。使用连接池可以帮助您获得不同的连接。

  2. 连接池肯定会有所帮助。

  3. 工作结束后释放连接。连接有一个限制,称为连接超时。所以你需要使用一些第三方库来处理这个问题,c3p0 是一个很好的库,可以帮助你。

请参考以下链接进行配置:

c3p0的最佳配置

于 2013-06-30T17:12:23.377 回答