我有一个InnoDB表,列出了一堆需要处理的文件。
处理处理的python脚本基本上是这样做的:
这个python脚本将被多次调用,所以我有点担心在步骤1和2可能存在一些问题,其中进程B将在进程A有时间之前从进程A获取与进程A相同的行更新步骤2中的状态。
我猜Python GIL对我没有帮助,因为解释器在执行SQL时会释放GIL(对吧?)。从我正在阅读的内容来看,在InnoDB上执行表锁是行不通的。行级锁定会解决这个问题吗?如果没有,我的其他选择是什么?
我可以简单地“从线程导入锁定”并添加
with lock:
update_file_status(file_id, "processing")
答案 0 :(得分:3)
使用SELECT FOR UPDATE
语句 - 这将获取该行的独占锁定,并且不允许同一行中的其他SELECT FOR UPDATE
。