#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 для масштабирования сервера, там будет какая-то конфигурация, которую вы можете установить, чтобы решить вашу проблему