独立して実行され、メインプロセスが閉じられても実行を継続するサブプロセスをPythonで開始するにはどうすればよいですか?

wsg

リモートサーバーからリクエストを受信して​​いる小さなFlaskAPIがあります。リクエストを受信するたびに、サブプロセスが開始されます。このサブプロセスは、同じフォルダーにある2番目のPythonファイルを実行しているだけです。このサブプロセスは数時間実行でき、これらのサブプロセスのいくつかは同時に実行できます。stdoutを使用して、Pythonファイルの出力をテキストファイルに書き込みます。

これらはすべて正常に機能していますが、数週間ごとにFlask APIが応答しなくなり、再起動する必要があります。Flaskサーバーを停止するとすぐに、実行中のすべてのサブプロセスが停止します。これを回避し、フラスコAPIとは別に各サブプロセスを実行したいと思います。

これは私が行っていることを示す小さな例です(このコードは基本的にAPIを介して呼び出すことができるメソッド内にあります)

import subprocess

f = open("log.txt","wb")
subprocess.Popen(["python","job.py"],cwd = "./", stdout = f, stderr = f)

Flask APIを停止した後も、サブプロセスが実行され続けるようにしたいと思います。現在、これは当てはまりません。他の場所で、その理由はstdoutパラメーターとstderrパラメーターを使用しているためだと読みましたが、それらを削除した後でも、動作は同じままです。

どんな助けでもいただければ幸いです。

ヴィクトル・ペトロフ

Flaskサーバーを再起動すると親プロセスが停止するため、サブプロセスは停止します。新しいシェルでPython呼び出しを実行して、サブプロセスをFlaskプロセスから完全に分離する必要があります。

from subprocess import call

# On Linux:
command = 'gnome-terminal -x bash -l -c "python job.py"'
# On Windows:
# command = 'cmd /c "python job.py"'
call(command, shell=True)

このようにして、job.pyのPython呼び出しは、Flaskサーバープロセスの影響を受けずに、別のターミナルウィンドウで実行されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ