0

我正在使用 concurrent.futures 模块并行运行作业。它运行得很好。

每当作业开始/结束时,开始时间和完成时间都会在 mysql 数据库中更新。此外,每个作业都从数据库中获取其输入文件并将输出文件保存在数据库中。我收到错误

“错误 2006:MySQL 服务器已消失”

"Error 2013: Lost connection to MySQL server during query"在运行脚本时。

我在运行单个作业时不会遇到这些错误。

示例脚本:

import concurrent.futures

executor = concurrent.futures.ThreadPoolExecutor(max_workers=pool_size)

futures = []

for i in self.parent_job.child_jobs:
    futures.append(executor.submit(invokeRunCommand, i))

def invokeRunCommand(self)
    self.saveStartTime()
    self.getInputFiles()
    runShellCommand()
    self.saveEndTime()
    self.saveOutputFiles()

我正在使用单个数据库连接和游标来执行所有查询。有些查询是耗时的。不确定出现此错误的原因。有人可以澄清一下吗?

-谢谢

4

1 回答 1

0

是的,与数据库的单个连接不是线程安全的,因此如果您为多个线程使用相同的数据库连接,事情将会失败。

如果您的伪代码具有代表性,只需为您的每个线程启动并使用单独的数据库连接,invokeRunCommand一切都会好起来的。

于 2013-08-05T09:04:24.603 回答