我如何确保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