2

この質問は不明確かもしれません-もしそうなら、それはおそらく私が質問の仕方を完全に知っているわけではないからです-しかし、ここに行きます:

関数を呼び出したい Python クラスがあります。

クラスは、関数が操作する必要があるデータにアクセスできません。基本的に、関数を呼び出す別のプロセスにクラスからメッセージを送信したいと考えています。何かのようなもの:

from multiprocessing import Process

class Foo():
   def bar(phonenumber):
      do_something()
      send_message(phonenumber)

def daemon(data, phonenumber):
   while nothing_receivied(phonenumber):
      do_nothin()
      also_do_not_consume_too_much_CPU()
   if message_received(phonenumber):
      function(data)

p = Process(target=daemon, args=(data, phonenumber))
p.start()
p.join()

呼び出しには、実行されるFoo.bar(phonenumber)追加の効果が必要です-これはどのように達成できますか?functiondata

乾杯!

4

1 に答える 1

0

特にモジュールを使用しようとしている場合はmultiprocessing、おそらくキュー/パイプの使用を検討する必要があります。http://docs.python.org/library/multiprocessing.html#pipes-and-queues

CPUをあまり消費せずに座って何もしないデーモンコードの部分は、キューからアイテムを取得しようとするポイント、またはパイプをポーリングしてデータを取得し、何かが準備できるまでブロックするポイントです。キューまたはパイプの反対側は、単にデータをキューに入れて、send_messageコンセプトの役割を果たします。

より堅牢な非同期ソリューションが必要な場合は、Twistedライブラリも確認する必要があります:http://twistedmatrix.com/trac/

これにより、着信接続を処理するためのハンドラーを備えたイベントループを持つサービスをより高いレベルで定義できます。

最後に、ネットワークベースではなく、すべて同じスクリプトで単純なソリューションが必要な場合は、スレッドモジュール( http://docs.python.org/library/threading.html)を簡単に使用できます。そして、デーモンのQueue.Queueを使用してブロックし、get()send_message()を使用してput()

于 2012-03-03T17:02:33.863 に答える