3

我有一个 InnoDB 表,其中列出了一堆需要处理的文件。

处理处理的python脚本基本上是这样做的:

  1. 获取下一个状态为“未处理”的文件
  2. 将状态设置为“处理中”
  3. 调用一些 C++ 脚本来处理该文件
  4. 将其标记为“已处理”
  5. 结尾

这个 python 脚本将被多次调用,所以我有点担心在第 1 步和第 2 步可能会出现一些问题,其中进程 B 将在进程 A 有时间更新之前从数据库中获取与进程 A 相同的行步骤 2 中的状态。

我猜 Python GIL 在这里对我没有帮助,因为解释器会在执行 SQL 时释放 GIL(对吗?)。从我正在阅读的内容来看,在 InnoDB 上进行表锁定是行不通的。行级锁定会解决这里的问题吗?如果没有,我的其他选择是什么?

我可以简单地做“从线程导入锁”并添加

with lock:
    update_file_status(file_id, "processing")

?

4

1 回答 1

3

useSELECT FOR UPDATE语句 - 这将获得行上的排他锁,并且不允许SELECT FOR UPDATE同一行上的其他锁。

于 2013-05-29T12:37:42.653 回答