LoginSignup
2
0

More than 1 year has passed since last update.

pythonでpgrepして多重起動を防止する(走り書き)

Posted at

※この記事は個人的なメモです

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

注意点

スクリプト名が一緒だと別のファイルでも実行制限に引っ掛かります(笑)

参考サイト

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0