Flask应用程序启动后如何自动命中端点?

时间:2019-09-30 07:09:04

标签: python api flask amazon-sqs wsgi

我正在研究flask应用程序,该应用程序不断检查来自AWS SQS队列的新消息并接收它们。为此,我编写了一个可以由端点触发的函数。 -/start。为简单起见,在代码中,我没有发布用于接收来自SQS队列的消息的所有逻辑。只需打印日期时间并等待3秒钟即可。

烧瓶服务器启动并准备好处理请求后,如何使该端点被命中?

有没有装饰器或其他东西使之成为可能?

quque_services.py:

from datetime import datetime
import time
def receive_messages():
    print(datetime.now())
    time.sleep(3)

__ init __。py:

from flask import Flask, request, jsonify
from app.workload.services.queue_services import receive_messages

def create_app(**kwargs):
    app = Flask(__name__, **kwargs)

    @app.route('/start')
    def queue_receiver():
        while True:
            receive_messages()

    return app

wsgi.py:

from app import create_app

application = create_app()

if __name__ == "__main__":
    application.run()

1 个答案:

答案 0 :(得分:0)

创建应用程序后,可以使用flask测试客户端将请求发送到应用程序。我已将您的代码简化为下面的单个自包含脚本,以说明这一点。

from flask import Flask

def create_app(**kwargs):
    app = Flask(__name__, **kwargs)

    @app.route('/start')
    def queue_receiver():
        print("***Endpoint hit***")
        return ""

    return app

application = create_app()

if __name__ == "__main__":
    application.test_client().get('/start')
    print("***Starting server***")
    application.run()

如果这不适用于您的代码,那么我怀疑这是因为您从未从/start端点返回。我以为您已在处理所有消息时打破了while True循环,但其中没有包含简短代码。如果不是这种情况,那么可能有必要按照注释中先前的建议将应用程序拆分为单独的客户端和服务器。