※この記事は個人的なメモです
pythonの多重起動を防止するのに,ファイルの存在でチェックしたり(例外で落ちてファイルが残る),ファイルのロックを使ったり(他プログラムからファイル自体を消されたり),専用のライブラリを導入したり(わざわざ?)等いろいろありますが,bashで多重起動をしないようにする方法をそのまま利用してしまえば早いし応用性が高い(perlでも似たようなことができる).
コード
main_code.py
import os
def main():
# main codes here.
if __name__ == "__main__":
pid = os.getpid()
scriptname = os.path.basename(__file__)
oldest_pid = int(os.popen(f"pgrep -fo {scriptname}").read())
if pid == oldest_pid:
main()
else:
print("other process already running.")
結局やってること
bashで言う下記のコードを実行してます.
main_code.sh
#!/bin/bash
main(){
# main codes here.
}
pid=$$
scriptname=`basename $0`
oldest_pid=`pgrep -fo $scriptname`
if [ $pid == $oldest_pid ]; then
main
else
echo "other process already running."
fi
注意点
スクリプト名が一緒だと別のファイルでも実行制限に引っ掛かります(笑)
参考サイト
https://docs.python.org/ja/3/library/os.html
https://docs.python.org/ja/3/library/subprocess.html
https://www.mk-mode.com/blog/2016/02/21/linux-bash-check-double-start/
↧