如何确保InnoDB线程安全性

3
我有一个InnoDB表格,其中列出了需要处理的一堆文件。
处理这些文件的Python脚本基本上会执行以下操作:
1. 获取下一个状态为“未处理”的文件 2. 将状态设置为“处理中” 3. 调用一些C++脚本来处理该文件 4. 将其标记为“已处理” 5. 结束
由于这个Python脚本将被多次调用,我有点担心在步骤1和2中可能会出现问题,即进程B在进程A更新步骤2的状态之前从数据库中获取了相同的行。
我猜测Python GIL对我没有帮助,因为解释器在进行SQL时会释放GIL(对吗?)。从我所读到的资料来看,在InnoDB上进行表锁定是无效的。行级锁定能否解决此问题?如果不能,我还有其他选择吗?
我可以简单地使用“from threading import Lock”并添加...
with lock:
    update_file_status(file_id, "processing")

?

1个回答

3

使用SELECT FOR UPDATE语句 - 这将在行上获取排他锁,并且不允许同一行上的其他SELECT FOR UPDATE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接