【发布时间】:2013-03-16 22:33:16
【问题描述】:
我有一个描述在分布式系统上处理的作业的数据库表。所以整个工作被分成许多小部分,每个部分都在不同的机器上在它自己的环境中处理。
我想记录每个进程的运行情况,因此每个节点都使用 SQLAlchemy 连接到同一个作业表,并将它们的作业号和状态附加到 UnicodeText 字段的末尾。
我希望看到类似的东西:
Part 1: complete<br/>
Part 2: complete<br/>
Part 3: error<br/>
Part 4: complete<br/>
...etc
当每个节点完成处理零件时,我只是在每个节点上执行一个process.log += "Part 1: complete\n"。然后是session.commit()
我知道零件编号会出现故障,这对我的目的来说很好,但是发生的事情是我只得到了全部零件的几个条目。我认为这是因为许多作业同时完成并且执行附加 += 不是线程安全的。
我对会话不是很好,所以我不知道配置它的所有技巧。我确实尝试使用 NullPool 无济于事。
有没有办法让追加操作线程在这样的分布式环境中安全?
【问题讨论】:
标签: multithreading sqlalchemy distributed