これはおそらく、ピカを使用するのと同じくらい Python コールバックに関する質問です。RabbitMQ のキューにサブスクライブし、配信されたメッセージのペイロードを処理し、そのペイロードを一連の (ディスク) ファイルに書き込むコードを開発しようとしています。そこで、 http://www.rabbitmq.com/tutorials/tutorial-one-python.htmlにある単純な「Hello World」の例を使用して、コールバック関数にロジックを追加しました (偶然にも「コールバック」と呼ばれます)。 ) を使用して、受信したメッセージ ペイロードをファイルに書き込みます。
主な問題は次のとおりです。特定の時間が経過した場合、たとえば 300 秒 (5 分) プロセスがファイルを閉じて新しいファイルを作成し、その後受信した新しいメッセージを書き込む追加のコードを書きたいと思います。それ。等々 ...
しかし、私が見ている問題は、メッセージがキューに到着したときにのみコールバック関数が呼び出されることです。そのコールバック関数の外に、経過時間を計測する何らかの処理が必要だと思います....
理論的根拠は、MQ キューで受信したメッセージを含む一連のディスク ファイル (タイムスタンプに基づいてすべてが一意の名前を持つ) を作成することです。メッセージの受信が遅い場合は、現在開いているファイルを閉じて (下流でさらに処理できるようにするため)、別のファイルを開きます。
また、消費開始呼び出し (channel.start_using) を発行した後、その下のコードに到達しないことにも気付きました-なぜですか?
私はpythonのマルチプロセッシングモジュールをいじってみましたが、今のところうまくいきません。
擬似コード コメント付きのスケルトン コードを次に示します:-
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
print ' [*] Waiting for messages. To exit press CTRL+C'
def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
# want to put code here to write message payloads to a file (unique name)
# if n secs have elapsed then close the file and create a new file
channel.basic_consume(callback,queue='hello',no_ack=True)
channel.start_consuming()
ありがとう !