问题描述
背景
在下面的代码中,我有一个名为process的函数,该函数会执行一些操作,并且在运行时,我想确保它不会同时运行。我有一个名为creation_status
的表,可以在我开始该过程时在其中设置时间戳。我使用时间戳的原因是,它可以让我知道何时需要启动此过程。
我总是检查是否已经有时间戳记,是否存在异常,以确保我没有同时运行此脚本。
代码
def is_in_process() -> bool:
status = db.run_query(sql="SELECT is_in_process FROM creation_status")
return False if status[0].is_in_process is None else True
def set_status() -> None:
db.execute(sql="UPDATE creation_status SET is_in_process = NOW()")
def delete_status() -> None:
db.execute(sql="UPDATE creation_status SET is_in_process = NULL")
def process():
if is_in_process():
raise Exception("Must not run concurrent process creations." )
set_status()
# stuff happens
delete_status()
问题
我想确保我的查询是 atomic ,以消除比赛条件。在我检查函数is_in_process
并调用函数set_status
时,可能会启动另一个脚本。我如何确保这两件事一口气发生,所以我避免了比赛条件。
请让我知道我是否可以解释清楚一些,并且我愿意接受所有建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)