Как автоматически попасть в конечную точку после запуска приложения фляги? - PullRequest
0 голосов
/ 30 сентября 2019

Я работаю над приложением фляги, которое постоянно проверяет новые сообщения из очереди 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 голосов
/ 30 сентября 2019

Вы можете использовать тестовый клиент колбы для отправки запросов к приложению после его создания. Я упростил ваш код в единый автономный скрипт ниже, который демонстрирует это.

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, когда все сообщения были обработаны, но не включали код для краткости. Если это не так, то, вероятно, будет необходимо разделить приложение на отдельный клиент и сервер, как ранее предлагалось в комментариях.

...