ls0f / my-issues

0 stars 0 forks source link

防止程序并发运行 #19

Open ls0f opened 8 years ago

ls0f commented 8 years ago

一般说道防止程序或代码片段并发运行会想到锁,但是这个适用于多线程同步,多进程里面就要引入IPC机制进行同步了。

比如有一个脚本通过crontab定时运行,但是你不想两个脚本同时运行,一般的做法是运行前检测有无临时文件,如果没有创建一个临时文件,运行,退出时删除临时文件。但这个有一个问题就是假如两个程序同时运行,同时检测文件是否存在,很有可能会同时运行两个进程。

发现Python中有一个很好的模块可以用。原理就是通过os.O_CREAT|os.O_EXCL标记创建文件,这是一个原子操作,也就是要么创建成功要么失败。具体用法可见源代码。