Python CGI очередь - PullRequest
       19

Python CGI очередь

1 голос
/ 03 октября 2011

Я работаю над довольно простым CGI с Python.Я собираюсь поместить его в Django и т. Д. Общая настройка довольно стандартна на стороне сервера ( т.е. вычисления выполняются на сервере):

  1. Пользователь загружает файлы данных инажимает кнопку «Выполнить»
  2. Сервер выполняет параллельные закулисные задания, используя большое количество оперативной памяти и мощности процессора.Спустя ~ 5-10 минут (средний вариант использования) программа завершает работу, создав файл ее вывода и несколько файлов рисунков .png.
  3. Сервер отображает веб-страницу с цифрами и некоторым кратким текстом

Я не думаю, что сотни или тысячи людей будут использовать это одновременно;тем не менее, поскольку для выполнения вычислений требуется изрядное количество оперативной памяти и мощности процессора (каждый экземпляр выполняет самую ресурсоемкую задачу с использованием Pool Python).

Мне было интересно, знаете ли вы, стоит ли этопроблема в использовании системы очередей.Я наткнулся на модуль Python beanstalkc, но на странице он сказал, что это система очередей в памяти.

Что означает «в памяти» в этом контексте?Я беспокоюсь о памяти, а не только о времени процессора, и поэтому хочу убедиться, что одновременно выполняется только одно задание (или хранится в ОЗУ, независимо от того, получает ли оно время ЦП).

Кроме того, я былпытаясь решить, должна ли

  • страница результатов (обслуживаемая CGI) сообщать вам о своей позиции в очереди (до тех пор, пока она не запустится, а затем отобразит фактическую страницу результатов)

    ИЛИ

  • пользователь должен отправить свой адрес электронной почты в CGI, который отправит им ссылку на страницу результатов, когда она будет завершена.

Как вы думаете, что является подходящей методологией проектирования для CGI с небольшим движением для такой проблемы?Совет очень ценится.

1 Ответ

1 голос
/ 03 октября 2011

Обязательно используйте сельдерей . Вы можете запустить сервер amqp или, я думаю, вы можете подать в суд на базу данных в качестве очереди за сообщения. Он позволяет запускать задачи в фоновом режиме и может использовать несколько рабочих машин для выполнения обработки, если хотите. Он также может выполнять задания cron на основе базы данных, если вы используете django-celery

Это так просто, чтобы запустить задачу в фоновом режиме:

@task
def add(x, y):
    return x + y

В проекте, который у меня есть, он распределяет работу по 4 машинам и работает замечательно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...