其他分享
首页 > 其他分享> > 我如何确保innodb线程安全

我如何确保innodb线程安全

作者:互联网

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

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

>获取状态为“未处理”的下一个文件
>将状态设置为“处理中”
>调用一些C脚本来处理该文件
>将其标记为“已处理”
>结束

此python脚本将被多次调用,因此我有点担心在步骤1和2可能会出现一些问题,其中在进程A有时间更新进程B之前,进程B将与进程A从db获得同一行.步骤2中的状态.

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

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

with lock:
    update_file_status(file_id, "processing")

解决方法:

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

标签:locking,thread-safety,innodb,python,mysql
来源: https://codeday.me/bug/20191123/2066056.html