【发布时间】:2021-05-31 08:37:00
【问题描述】:
我需要实现一种方法来允许并发读取来检查记录是否已设置。如果设置它们只是返回。如果不是,则第一个读取进程/线程将根据它获得的结果对其进行设置。这样做的目的是只运行一次初始化脚本。
如果我使用mysql 8.0,我想我可以使用SELECT ... FOR UPDATE NOWAIT,所以如果一个进程/线程未能获得锁,这意味着另一个进程/线程已经获得它,所以它可以返回。获得锁的人将决定是否需要运行初始化脚本并更新记录。
但是我用的是mysql 5.7,没有NOWAIT,如果我用SELECT ... FOR UPDATE,并发读取就变成一一等待锁了。我觉得还不够好。那么是否可以实现一个自制的NOWAIT(在python中)?
我的目标是确保初始化脚本只运行一次,所以如果没有NOWAIT,还有其他方法吗?
【问题讨论】:
标签: python mysql multithreading concurrency locking