2009-08-30 2 views
0

私は、アプリケーションといくつかの外部デバイスとの間に「接着剤」として機能するようにPythonスクリプトを作成する過程にあります。スクリプト自体は非常に単純であり、3つの異なる方法があります(UDPを介して、ソケット接続から) バックグラウンドプロセスとしてのPythonスクリプトのパフォーマンス

  • 応答を受信する(UDPを介して、ソケット接続から)

    1. 要求データを
    2. プロセス応答とサードパーティのアプリケーションでデータを利用できるようにする

    ただし、これは繰り返し実行され、いくつかの(+/- 200種類の)デバイスに対して行われます。したがって、デバイス#200に到達すると、デバイス#001からのデータの要求が再度開始されます。ここで私の主な関心事は、スクリプトを実行している間にプロセッサを駄目にすることではありません。

    更新日: 上記の3つのスレッドを使用して、上記の各プロセスごとに1つのスレッドを使用しています。リクエスト/レスポンスは非同期です。各レスポンスには、(送信者の詳細を含む)それを処理するために必要なものがすべて含まれています。

    スクリプトをバックグラウンドで実行し、できる限り少ないシステムリソースを消費する方法はありますか?これはWindows 2003マシンで実行されます。

    アドバイスをいただければ幸いです。

  • 答えて

    4

    Twisted - Pythonのための最高の非同期フレームワークは、システムリソースの最小限の量でこれらのタスクを実行できます。特に、複数のデバイスをただちに処理する必要はありませんいくつかのデバイスが非常に遅れて応答したり、しばらくのうちに応答しなくても「タイムアウト」する結果になるリスクがある場合は、サイクルタイムが長すぎることがあります。私は、この過度の遅延リスクを回避するために、少なくとも半分のデバイスを「再生中」にすることをお勧めします。

    +0

    ツイストが面白いようです。イムは別のスレッドによって行われるので、遅れた回答の問題についてあまり心配していません。私は間違いなくツイストに見えます。 – mozami

    +0

    ポイントは、スレッドを使用すると非同期I/O(Twistedなどの優れた実装で処理される)よりもシステムリソースを消費する可能性が高いということです。 Twisted(より一般的には、非同期、イベント駆動型プログラミング)は慣れていますが、時間とエネルギーの投資で高いリターンを実現します!) –

    5

    デバイスにブロッキングI/Oを使用している場合、スクリプトはデータを待っている間はプロセッサを消費しません。どのくらいのプロセッサを使用するかは、データでどのような計算をしているかによって異なります。

    +2

    待つために 'select'を使用している場合は、話す。 –

    +0

    ...これは、Twistedの非同期I/Oが、select、poll、kqueue、MsgWaitForMultipleObjects、またはあなたの特定のシステム上のReactorパターンの最良実装をカバーしています。 –