search
LoginSignup
16

More than 3 years have passed since last update.

posted at

updated at

pythonでプロセスの多重起動を防ぐ

python3系でプロセスの2重起動とかの多重起動を防ぐ方法です。

多重起動を防ぐ一般的な方法としては大体以下の2つかと。

  • ロックファイルを作る
  • プロセスの状況をOSなどから監視する

ロックファイルは、プロセスkillしたりすると起動しなくなったりであまり好きじゃないです。

プロセス監視はシェルからの例が多くて、pythonそのものやっている例があまりなかったので以下に記載しておきます。

sample.py
# -*- coding: utf-8 -*-
from os import path
import subprocess

# 2重起動を防ぐ
file_name = path.basename(__file__)
p1 = subprocess.Popen(["ps", "-ef"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", file_name], stdin=p1.stdout, stdout=subprocess.PIPE)
p3 = subprocess.Popen(["grep", "python"], stdin=p2.stdout, stdout=subprocess.PIPE)
p4 = subprocess.Popen(["wc", "-l"], stdin=p3.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
p2.stdout.close()
p3.stdout.close()
output = p4.communicate()[0].decode("utf8").replace('\n','')

if int(output) != 1:
    exit()

自身のファイル名を調べて、同じ名前のプロセスが1個でなかったら、処理をそのまま停止しています。

1個なのは起動したスクリプトです。

間にpythonという名前でgrepしているのは、viewとか他のプロセスの起動で邪魔されないことと、grepのプロセスそのものを排除しています。

プログラムの頭にあるともっさりしていますが、重い処理の時はそれなりに便利です。

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
What you can do with signing up
16