我有一个描述在分布式系统上处理的作业的数据库表。所以整个工作被分成许多小部分,每个部分都在不同的机器上在它自己的环境中处理。
我想保留每个进程如何运行的简单日志,因此每个节点都使用 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 无济于事。
有没有办法让附加操作线程在这样的分布式环境中安全?