@NooooN
Секьюрник, гык. Лавки вебчик за 300.

Как настроить flask сервер?

Ахтунг! Помогите, у меня есть Flask сервер, главная задача которого, вызвать в системе скрипт с параметром переданным в запросе. Вот код:

import subprocess
from flask import Flask
from flask import Response

app = Flask(__name__)

@app.route("/<url>", methods=['GET'])
def index(url):
	cmd = './prg '
	cmd = cmd + url
	PIPE = subprocess.PIPE
	p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
	        stderr=subprocess.STDOUT, close_fds=True, cwd='/home/prog')
	resp = Response(p.stdout.read())
	resp.headers['Access-Control-Allow-Origin'] = '*'
	return resp 

if __name__ == "__main__":
    context = ('/var/www/httpd-cert/www-root/cert.crt', '/var/www/httpd-cert/www-root/cert.key')
    app.run(host='0.0.0.0', port=9090, ssl_context=context)


Столкнулся с проблемой, у меня сервер падает после обращения к нему, с чем это может быть связанно? Как настроить сей процесс оптимально? Стоит заметить, что программа которая вызывается вычислительно затратная и работает довольно не мало, используя при этом все доступные ядра. (иногда до нескольких минут)
  • Вопрос задан
  • 703 просмотра
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
У вас неправильно сделано. Нельзя блокировать поток выполнения во flask, так как он однопоточный, то вы полностью подвешиваете сервер до момента просчета вашего задания. Для вашей задачи нужно запускать параллельно процесс, данные этого процесса складывать например в отдельную базу или файл, тут-же отдавать результат с номером вашего процесса.
Для этого можно использовать какую нибудь простую очередь задач типа python-rq.org
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы