2

私が達成しようとしている最終結果は、サーバーが接続時にクライアントに特定のタスクを割り当てることができるようにすることです。簡易版はこんな感じ

  1. クライアントがサーバーに接続
  2. サーバーはクライアントにいくつかのネットワークタスクを実行するように指示します
  3. クライアントはタスクを受け取り、別のプロセスを起動してタスクを完了します
  4. クライアントはサーバーに起動したことを通知します
  5. サーバーはクライアントに、別のタスクがあることを伝えます(など...)

いくつかのメモ

  • クライアントが実行できるタスクの数には上限があります
  • クライアントは、タスク/プロセスを監視できる必要があります (実行中?停止中?)。
  • 必要に応じて、クライアントがプロセスからデータを受信して​​サーバーに送信できると便利です

最初はスレッド化しようと思っていたのですが、python は正しくスレッド化しないと聞きました (それは正しいですか?)

その後、python からシステムコールを発火させて PID を記録すると考えられていました。次に、ステータス、停止、(SIGUSR1、SIGUSR2、SIGINT) のために特定のシグナルを送信します。しかし、別のプロセスからデータをキャプチャできるかどうかわからないため、それが機能するかどうかはわかりません。できれば、それがどのように達成されるかわかりません。(標準出力またはソケットファイル?)

これを処理する最善の方法として、皆さんは何を提案しますか?

4

2 に答える 2

4

spawnProcessを使用して、サブプロセスを生成します。既に Twisted を使用している場合、これは既存のプロトコル ロジックに非常にシームレスに統合されるはずです。

于 2012-06-21T17:46:53.950 に答える
0

Python の分散タスク キューであるCeleryを使用します。それはおそらくあなたが望むすべてを行うか、あなたが望むすべてを行うようにすることができます。また、まだ考慮していない可能性のある多くのエッジケースも処理します (サーバーがクラッシュした場合に既存のジョブに何が起こるかなど)。

RabbitMQ のようなメッセージング キューを使用して、他のソフトウェアから Celery と通信できます。詳細については、Celery のチュートリアルを参照してください。

MySQL や PostgreSQL などのデータベースを使用してタスクとその結果に関する情報を保存するのがおそらく最も便利ですが、必要に応じてデータベースを使用しないソリューションを設計することもできます。

于 2012-06-21T16:19:55.627 に答える