Совместное использование процессов и состояния в Flask + GunicornPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Совместное использование процессов и состояния в Flask + Gunicorn

Сообщение Anonymous »

Я создаю приложение Flask, состоящее из двух частей:
  • "Исполнительная часть": оно получает задачу и затем выполняет ее. Исполнитель запускает каждую задачу в отдельном процессе из-за работы ввода-вывода (2 соединения сокета). Одновременно может выполняться только одна задача (поскольку они используют общие ресурсы).
  • "Часть колбы": она предоставляет пользователям контроль над исполнителем, фиксирует задачи, считывает состояние исполнителя. и т. д.
Мостом между этими двумя частями является глобальный объект TaskExecutor.

TaskExecutor.py

Код: Выделить всё

def execute(task, reporter):
conn = ResourceConnection(...)
with conn as c:
for f in task:
func, args = f
func(c, **args)
reporter.report(...)  # updates state of execution

class TaskExecutor:
def __init__(self):
self._process = Process()
self.reporter = Reporter()  # some variables

def _is_alive(self):  # checks if the process is alive
...

def _graceful_term(self):  # stops the process
...

def start(self, task):
if self._is_alive():
self._graceful_term()
self._process = Process(target=executor,
args=(task, self.reporter))
self._process.start()

def stop(self):
...
Controlbp.py

Код: Выделить всё

control_bp = Blueprint('control', __name__, url_prefix='/control')

task_executor = TaskExecutor()

@control_bp.route('/demo', methods=["POST"])
def run_demo():
task_executor.start([demo_func, {"a": 42}])
return ""

@control_bp.route('/state')
def get_state():
return task_executor.reporter.to_json()
Сейчас в среде разработки Flask все работает нормально.

Я начал смотреть на Gunicorn, и мне кажется неясным, если бы только один Задача в моей «исполнительной части» будет выполняться одновременно и будет ли вообще работать. Gunicorn, похоже, порождает дочерние процессы (работники), которые будут иметь общую память, которая используется только для чтения, а не для записи или выполнения. Я ошибаюсь, или мне нужно как-то доработать мост? Как Gunicorn создает рабочие процессы с общими объектами?

Если это важно, в моем приложении одновременно будет только 1–2 пользователя.


Подробнее здесь: https://stackoverflow.com/questions/631 ... k-gunicorn
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»