私はPython 2.7
スクリプトを書いています。
要約すると、このスクリプトは毎晩Linux
で実行され、いくつかのプロセスをアクティブにします。python - スクリプトが一度だけ有効になるようにする
私は、このスクリプトが複数回並列に実行されないようにしたいと考えています(基本的にはSingleton
パターンを模倣しようとしていますが、アプリケーションレベルで)。
コード例
def main():
# before doing anything, I'd like to know whether this
# script was activated and alive.
# if so, error out
# do something
if __name__ == "__main__":
main()
提案
素朴な解決策は、ミューテックスとして動作するロックファイルのいくつかの種類を作成することです。
最初に行うことは、このファイルが存在するかどうかを確認することです。もしそうであれば、スクリプトの他のインスタンスがすでにそれを作成しており、エラーが発生するはずです。スクリプトが終了したら、このファイルを削除します。
ファイルシステム上の操作がアトミックである限り、この解決策が動作すると仮定しています。
実装
import os, sys
lock_file_path = ".lock_script"
def lock_mutex():
if os.path.exists(lock_mutex_path):
print "Error: script was already activated."
sys.exit(-1)
else:
file = open(lock_mutex_path, 'w')
def unlock_mutex():
assert(os.path.exists(lock_mutex_path))
os.remove(lock_mutex_path)
def main():
try:
lock_mutex()
# do something
unlock_mutex()
except:
unlock_mutex()
if __name__ == "__main__":
main()
lock_mutex()
とunlock_mutex()
を確保するためにどのように問題
アトミックですか?
既に正しく動作している場合は、スクリプトを起動したくないですか? – Artur
好奇心の渦中に、これが心配であるようにスクリプトがどのように開始されましたか? – ratatoskr
あなたのソリューションは* naive *ソリューションではないと思います。実際、スクリプトが実行されているかどうかを確認するためにロックファイルを作成するのは非常に一般的です。 – aIKid