这可能是关于python回调的问题,就像使用鼠兔一样。我正在尝试开发一些订阅RabbitMQ中队列的代码,处理任何传递的消息的有效负载,然后将该有效负载写入一系列(磁盘)文件。因此,使用http://www.rabbitmq.com/tutorials/tutorial-one-python.html处的简单“Hello World”示例,我在逻辑中添加了回调函数(通常称为“回调”),以将任何收到的消息有效负载写入文件。
这是主要问题:我想编写一些额外的代码,如果某个时间段已经过去,例如300秒(5分钟),那么进程应关闭文件并创建一个新文件并写入任何后续的新文件收到的消息。等等...
但是 - 我发现的问题是当消息到达队列时,只会调用回调函数。我想我需要在回调函数之外的一些过程来测量经过的时间....
基本原理是我想创建一组磁盘文件(所有磁盘文件都有基于时间戳的唯一名称),这些磁盘文件包含MQ队列中收到的消息。如果消息来得很慢,那么我关闭当前打开的文件(这样可以进一步向下游处理)并打开另一个文件。
我还注意到在发出开始消费调用(channel.start_consuming)后,没有达到下面的代码 - 为什么?
我玩过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()
谢谢!