Редактировать для уточнения моего вопроса:
Я хочу подключить службу python к uwsgi, используя эту функцию (я не могу понять примеры), и я также хочу иметь возможность передавать результаты между ними. Ниже я представляю некоторый контекст, а также представляю свою первую мысль по вопросу коммуникации, ожидая, может быть, какого-нибудь совета или другого подхода.
У меня есть уже разработанное приложение Python, которое использует multiprocessing.Pool
для запуска задач по требованию. Основная причина использования пула рабочих заключается в том, что мне нужно разделить несколько объектов между ними.
Кроме того, я хочу, чтобы у вас было приложение колбы, которое запускает задачи с конечных точек.
Я прочитал несколько вопросов здесь, посвященных SO, в поисках возможных недостатков использования фляги с многопроцессорным модулем python. Я все еще немного сбит с толку, но этот ответ хорошо суммирует как недостатки запуска multiprocessing.Pool
непосредственно из колбы, так и возможные варианты.
В этом ответе показана функция uWSGI для управления демоном / службами . Я хочу следовать этому подходу, чтобы использовать уже разработанное приложение Python в качестве службы приложения колбы.
Одна из моих главных проблем заключается в том, что я смотрю на примеры и не знаю, что мне нужно делать дальше. Другими словами, как мне запустить приложение Python оттуда?
Другая проблема связана с взаимодействием между приложением фляги и процессом / службой демона. Моя первая мысль - использовать flask-socketIO
для связи, но затем, если мой сервер останавливается, мне нужно иметь дело с соединением ... Это хороший способ связи между сервером и службой? Каковы другие возможные решения?
Примечание:
Я хорошо знаю о сельдерее и делаю вид, что использую его в ближайшем будущем. На самом деле, у меня есть уже разработанное приложение node.js, в котором пользователи выполняют действия, которые должны запускать конкретные задачи из (также) уже разработанного приложения Python. Дело в том, что мне нужна как можно скорее версия готовая к производству , и вместо того, чтобы модифицировать приложение python, использующее multiprocessing
, я подумал, что будет быстрее создать простой флеш-сервер для связи с node.js через HTTP. Таким образом, мне нужно было бы реализовать только приложение колбы, которое создает приложение python.
Edit:
Зачем мне делиться объектами?
Просто потому, что создание объектов в вопросах занимает слишком много времени. На самом деле создание занимает приемлемое количество времени, если оно выполняется один раз, но, поскольку я ожидаю (может быть) от сотен до тысяч запросов одновременно, чтобы снова загрузить каждый объект, я бы хотел этого избежать.
Одним из объектов является модель классификатора scikit, сохраненная в файле pickle, загрузка которого занимает 3 секунды. Каждый пользователь может создать несколько «рабочих мест», каждый из которых займет более 2 тыс. Документов для классификации, каждый документ будет загружен в неизвестный момент времени, поэтому мне нужно загрузить эту модель в память (загрузка ее снова для каждой задачи не приемлемо).
Это один пример одной задачи.
Редактировать 2:
Я задавал несколько вопросов, связанных с этим проектом ранее:
Как уже говорилось, но для уточнения: Я думаю, что лучшим решением было бы использование Celery, но чтобы быстро получить готовое к производству решение, я пытаюсь использовать это решение uWSGI Attach Daemon