1

Pythonのスレッドを指定された時間バックグラウンドでスリープさせようとしているという問題があります。ただし、PythonプログラムからPHPに渡されるデータがあるため、これはコマンドラインレベルではなく、プログラムで実行する必要があります。

import os
from threading import Thread

class getPID(Thread):
    def run(self):
        print os.getpid()

class waitToKill(Thread):
    def run(self):
        time.sleep(25) #This is the sleep that needs to be done in the background
        os.system('pkill process')

getPID().start()
waitToKill().start()

概念は、PHPがPythonプログラムを繰り返し開始し、PIDを取得して、pkillステートメントに到達する前にプロセスを強制終了するというものです。pkikll誰かがページを離れると、Pythonプログラムは開始されますが、強制終了されないため、ステートメントに到達し、ページを入力して開始されたプロセスを閉じます。

これは、PHP / Pythonでデッドマンスイッチを作成するのと同じくらい簡単ですが、PHPexec()関数はstd出力を受信して​​いる間はバックグラウンドで物事をうまく実行しないため、バックグラウンドスリープが必要です。(つまりexec(dms.py &)、PIDを返し、ページの残りの部分を表示する前に25秒間ハングします)

これを達成するための最良の方法は何ですか?それはtime.sleep()レベルまたはスレッドレベルである必要がありますか?または、バックグラウンドで実行しているときに出力を送信するようにPHPexec()関数を変更できますか?

あなたが提供できるどんな助けにも感謝します!

4

1 に答える 1

0

このタスクにスレッドを使用する必要はまったくありません。すべてのスレッドが終了するまでプロセスは終了したとは見なされないため、メインスレッドを早期に終了するメリットはありません。

次のいずれかを実行する必要があります。

  • プロセスが終了するのを待つ必要がないように、PHPからスクリプトを実行します(phpがバックグラウンドプロセスを実行するを参照) 。
  • Pythonプロセスをフォークするか、他の方法で新しいPythonプロセスを開始して、元のプロセスをすぐに終了できるようにします
于 2012-08-06T18:30:57.767 に答える