Skip to main content
 首页 » 编程设计

python之同时从 Rabbitmq 接收日志并运行您的 flask 应用程序

2025年05月04日39yyy_WW

我已经安装了rabbitmq并且可以正常工作,我知道如何接收日志但不知道如何使用flask将其显示给UI。

flask 应用程序.py

from flask import Flask 
from threading import Thread 
app = Flask(__name__) 
import pika 
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) 
channel = connection.channel() 
 
channel.exchange_declare(exchange='logs', 
                     type='fanout') 
 
result = channel.queue_declare(exclusive=True) 
queue_name = result.method.queue 
 
channel.queue_bind(exchange='logs', 
               queue=queue_name) 
 
print('[*] Waiting for logs. To exit press CTRL+C') 
def callback(ch, method, properties, body): 
    print(body) 
 
channel.basic_consume(callback, 
                      queue=queue_name, 
                      no_ack=True) 
 
thread = Thread(channel.start_consuming()) 
thread.start() 
 
@app.route('/') 
def index(): 
    return 'hi' 

我不知道如何使用多线程来运行 Flask 应用程序并不断从队列中接收日志。

请您参考如下方法:

您的 Flask 应用程序,这里是主线程,运行的时间或请求量由您的 uwsgi 或您用来运行它的任何其他工具决定。当主进程停止时,很可能是正常关闭 amqp 连接的错误时间。

此外,您的应用程序可能有多个实例同时运行(想想 uwsgi processes ),因此您会在每个工作程序/进程上获得一些日志。

这里的明智方法是将这两件事分开。在 Web 应用程序范围之外为您的日志运行消费者进程,即:使用 supervisord。