4

入力を渡すことができる Python インタープリターの永続的なインスタンスを実行しようとしています。これを行うために設計されたシステム全体は、PHP で作成されます。私は、beanstalkd 作業キューで使用する Pheanstalk パッケージに気付きました。Pheanstalk を使用して永続的なプロセスを生成 (および維持) した人はいますか? Pheanstalk の一般的な用途は、ユーザーの待機を避けるために、非同期の問題で長時間かかるスクリプトやその他のタスクを実行することであることを理解しています。私は非同期的に、入力を渡すことができる Python インタープリター プロセスを管理および維持する Pheanstalk ジョブ/プロセスを探しています。これは可能ですか?/すでに行われていますか?

4

1 に答える 1

4

私は確かに、Pheanstalk を使用して永続的なキュー ワーカーを実行しました。次のように機能します。

親 PHP プロセスは、指定された数のワーカー プロセスを fork します。各ワーカーは Pheanstalk を使用して beanstalkd に接続し、ジョブを待ちます。ワーカーがジョブを取得すると、タスクを実行してから終了し、メモリを解放します。次に、親 PHP プロセスが新しいワーカーを生成して、それを置き換えます。

あなたの要件は次のように聞こえます:

親 PHP プロセスはproc_open()を使用して Python インタープリター プロセスをフォークし、作成された STDIN および STDOUT パイプへの参照を格納します。次に、親 PHP プロセスがループに入り、Pheanstalk を使用して Beanstalk に接続し、次のジョブを予約します。ジョブが予約されると、PHP は fwrite() を使用してジョブの内容を Python STDIN パイプに送信し、次に fread() を使用して Python の STDOUT パイプから応答を読み取ります。

これは、ジョブが予約されるたびに新しい python プロセスを起動するのではなく、実行中の python プロセスを維持することを前提としています。

どちらにしてもクレイジーですが、うまくいくかもしれません。

より健全なオプションは、Python Beanstalkd クライアントを使用することですが、Pheanstalkを使用する人が増えるのを見るのは素晴らしいことです:)

乾杯、ポール

于 2011-05-24T15:21:50.497 に答える