我怎样才能确保innodb线程安全

时间:2013-05-29 12:15:33

标签: python mysql thread-safety locking innodb

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

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

  1. 获取status ='unprocessed'的下一个文件
  2. 将状态设置为“正在处理”
  3. 调用一些C ++脚本来处理该文件
  4. 将其标记为“已处理”
  5. 这个python脚本将被多次调用,所以我有点担心在步骤1和2可能存在一些问题,其中进程B将在进程A有时间之前从进程A获取与进程A相同的行更新步骤2中的状态。

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

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

    with lock:
        update_file_status(file_id, "processing")
    

1 个答案:

答案 0 :(得分:3)

使用SELECT FOR UPDATE语句 - 这将获取该行的独占锁定,并且不允许同一行中的其他SELECT FOR UPDATE