我有一个 InnoDB 表,其中列出了一堆需要处理的文件。
处理处理的python脚本基本上是这样做的:
- 获取下一个状态为“未处理”的文件
- 将状态设置为“处理中”
- 调用一些 C++ 脚本来处理该文件
- 将其标记为“已处理”
- 结尾
这个 python 脚本将被多次调用,所以我有点担心在第 1 步和第 2 步可能会出现一些问题,其中进程 B 将在进程 A 有时间更新之前从数据库中获取与进程 A 相同的行步骤 2 中的状态。
我猜 Python GIL 在这里对我没有帮助,因为解释器会在执行 SQL 时释放 GIL(对吗?)。从我正在阅读的内容来看,在 InnoDB 上进行表锁定是行不通的。行级锁定会解决这里的问题吗?如果没有,我的其他选择是什么?
我可以简单地做“从线程导入锁”并添加
with lock:
update_file_status(file_id, "processing")
?