Веб-приложение с Django для удаленного выполнения кода - PullRequest
3 голосов
/ 01 сентября 2011

Я пытаюсь разработать веб-приложение с Django, которое позволило бы пользователям запускать программы на С на сервере.В настоящее время я выполняю следующие шаги:

  • Пользователь вводит код и нажимает кнопку 'Submit'
  • Код отправляется на сервер;сервер помещает его во временный файл
  • код компилируется с использованием вызова subprocess.Popen()
  • Вывод (ошибка) возвращается обратно в браузер

Этопростая модель и работает нормально.Однако я не уверен, что это «идеальная» модель, и у меня есть некоторые опасения по поводу ее масштабируемости (и безопасности):

  1. Было бы лучше использовать threading?
  2. Было бы лучше использовать multiprocessing?
  3. Вопрос о бомбе-вилке был отмечен в связанном с этим вопросе, который я поднял здесь - как с этим бороться?Могут ли следующие настройки в apache2.conf справиться с такими ситуациями?

    # prefork MPM
    # StartServers: number of server processes to start
    # MinSpareServers: minimum number of server processes which are kept spare
    # MaxSpareServers: maximum number of server processes which are kept spare
    # MaxClients: maximum number of server processes allowed to start
    # MaxRequestsPerChild: maximum number of requests a server process serves

Я рассматриваю случай, когда, скажем, 5, 15, 50 пользователей будут пытаться запустить свой код параллельно,Кроме того, на данный момент я предполагаю, что вредоносный код не будет написан.

Просто упомяните, что mod_wsgi и mpm-prefork с Apache2 используются.

Спасибо за все ваши предложения!

1 Ответ

3 голосов
/ 01 сентября 2011

Может быть Проект Celery поможет вам.

Celery - это асинхронная очередь задач / очередь заданий, основанная на распределенной передаче сообщений.Он ориентирован на работу в реальном времени, но также поддерживает планирование.

Модули выполнения, называемые задачами, выполняются одновременно на одном или нескольких рабочих серверах с использованием многопроцессорной обработки, Eventlet или gevent.Задачи могут выполняться асинхронно (в фоновом режиме) или синхронно (ждать до готовности).

...