параллельная обработка нескольких запросов с помощью фляги

@app.route("/")
def start():
    #will do some task
    return 'completed'

В приведенной выше программе после выполнения 1-го запроса будет выполнен 2-й запрос. Но я хочу сделать такой сервер, который будет принимать, выполнять и отвечать на несколько запросов в определенное время параллельно, используя flask или что-то еще.

Как я это сделаю?


person Saikat Kundu    schedule 21.12.2016    source источник


Ответы (2)


Для обработки нескольких запросов/производственного развертывания необходимо использовать gunicorn, apache или gevent.

http://flask.pocoo.org/docs/0.11/deploying/

Аналогичный подход используется и для других веб-фреймворков Python, таких как Django.

person SaiNageswar S    schedule 21.12.2016
comment
Можете ли вы привести мне какой-либо пример, который может помочь мне проверить запрос на обработку паралея с помощью django ?? Спасибо - person Sudip Das; 21.12.2016
comment
@SudipDas Django можно развернуть с помощью Apache mod_wsgi, как описано в docs.djangoproject. com/en/1.10/howto/deployment/wsgi/modwsgi Я также использовал gunicorn, однако gunicorn не обслуживает статические файлы, и вам потребуется дополнительно связать его с nginx для обслуживания статических файлов. Для дальнейшего распараллеливания можно использовать сервис Docker Swarm and Scale или использовать Elastic Beanstalk и динамически масштабировать. - person SaiNageswar S; 21.12.2016

Вы можете использовать модуль klein, который обрабатывает несколько запросов одновременно.

  • Пожалуйста, обратитесь к следующей строке, в которой дается четкое объяснение ограничений в FLASK.

Сравнение Flask и Klein

После ссылки на эту ссылку я переключился с Flask на Klein. Надеюсь, это поможет и вам.

person Karthikeyan KR    schedule 21.12.2016
comment
Мне также нужен этот для распределенных кластерных вычислений, предположим, что нагрузка запроса на сервер m / c слишком высока, тогда я хочу переместить запрос на другой компьютер, подключенный к серверу. Обычно я использую dask.distributed для управления распределенными кластерными вычислениями. Могу ли я сместить запрос с помощью klein? В основном я хочу сместить запрос, если нагрузка на сервер слишком высока. - person Sudip Das; 21.12.2016
comment
Пожалуйста, обратитесь к их документации: media.readthedocs.org/pdf/klein/latest/klein .pdf - person Karthikeyan KR; 21.12.2016
comment
извините за беспокойство, можете ли вы прислать мне какой-нибудь пример, который может обрабатывать несколько запросов одновременно? используя этот пример ==> from klein import Klein import time app = Klein() def testFun(): print('Starting') while True: time.sleep(3) print('looping') time.sleep(3) print('3 секунды спустя') @app.route('/', method = ['GET']) def square_submit(request): # x = int(request.args.get('x', [0]) [0]) # res = x * x testFun() возвращает завершение, если name == main: app.run(localhost, 8888) - person Sudip Das; 21.12.2016
comment
Обработка нескольких запросов отличается от обработки нескольких запросов. Кляйн будет обрабатывать большой объем запросов за раз. Но обрабатывайте по одному. Но во Flask, даже если вы отправите более трех запросов во время выполнения одного, произойдет сбой. Вы также можете активировать поток в Klein для многократной обработки. - person Karthikeyan KR; 21.12.2016
comment
если я запускаю бесконечный цикл после поступления 1-го запроса, то 2-й запрос будет сохранен в очереди. BT я не хочу хранить этот второй запрос в очереди. Я хочу принять второй запрос, и оба запроса будут промежуточно выполнять функцию бесконечного цикла. клейн может это сделать?? - person Sudip Das; 21.12.2016
comment
from klein import Кляйн из twisted.internet import defer from twisted.internet import threads import time app = Klein() def testFun(request): print(request) while True: time.sleep(3) print('looping') time. sleep(3) print('3 секунды спустя') @app.route('/', method = ['GET']) def square_submit(request): #testFun(request) threads.deferToThread(testFun, request) return hello # res = x * x testFun() возвращает завершенный результат, если name == 'main': app.run(localhost, 8888) - person Karthikeyan KR; 21.12.2016
comment
хорошо, спасибо, это работает, здесь testFun() ничего не возвращает, но предположим, если testFun() возвращает какое-то значение через некоторое время, и я хочу, чтобы это значение возвращалось в bouser. тогда как я это сделаю?? - person Sudip Das; 21.12.2016
comment
перейдите по следующей ссылке, которая содержит решение: twistedmatrix.com/ документы/13.2.0/core/howto/threading.html - person Karthikeyan KR; 21.12.2016
comment
ты понял? - person Karthikeyan KR; 29.12.2016