как удерживать новый запрос, когда старый запрос обрабатывается в flask?

#python #flask #heroku #request #semaphore

#python #flask #heroku #запрос #семафор

Вопрос:

Я создал приложение python в flask. Здесь Скелтон кода

 app = Flask(__name__)

@app.route('/', methods=['GET'])
def authentication():
    '''athentication process'''
    return 'authenticated'
  

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

 @app.route('/', methods=['GET'])
    def authentication():
        sem.acquire()
        '''athentication process'''
        sem.release()
        return 'authenticated'
  

и я развернул это в Heroku . Есть идеи, как я могу этого добиться?

PS: Если это невозможно сделать, по крайней мере, я хочу ответить на новый запрос, что другой запрос находится в процессе, и повторить попытку через некоторое время

Ответ №1:

Короткий ответ: не беспокойтесь об этом.

Это работа веб-сервера. Когда вы размещаете приложение на любом сервере, таком как Apache, Nginx и т. Д., Сервер создает несколько процессов вашего приложения flask.Когда приходит запрос, серверная программа пересылает его любому из свободных процессов, если ни один процесс не свободен, сервер будет помещать запрос в очередь, пока один процесс не станет свободным. Это высокоуровневый обзор того, как работают HTTP-серверы.

Комментарии:

1. Нет, похоже, он не работает на сервере heroku (я использую только одного работника)

2. я не знаю о heroku, но это, безусловно, не проблема с Flask, она должна обрабатываться на http-сервере. Вам лучше проверить документы heroku для масштабирования сервера, там будет какая-то конфигурация, которую вы можете установить, чтобы решить вашу проблему