Выполнить фоновый процесс из django, который не может быть прерван веб-сервером - PullRequest
3 голосов
/ 17 ноября 2010

Я вижу все подобные темы, и они приняли ответы, и все же я все еще застрял в этом.

У меня есть представление, которое должно запустить процедуру резервного копирования, и я получил его до точки, когда представление возвращается, и процесс все еще работает в фоновом режиме, однако , если apache перезапускается , резервное копирование затем процесс умирает.

def partStartJob(request):
    import subprocess
    p=subprocess.Popen(['/usr/bin/nohup','/usr/bin/python', '/(somewhere)/scripts/backup/testbackup.py'] )
    # FIXME: This process dies when apache restarts.

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 17 ноября 2010

Вам необходимо использовать совершенно отдельный процесс для резервного копирования. Лучший способ сделать это - использовать очередь сообщений - представление помещает запрос на резервное копирование в очередь, а отдельный слушатель получает его и запускает резервное копирование независимо от Apache.

Celery - это распределенный диспетчер задач, который справляется со всем этим для вас, хотя было бы довольно легко создать свой собственный с RabbitMQ и библиотекой Python AMQP.

2 голосов
/ 18 ноября 2010

Возможно, не так элегантно, но, безусловно, самое простое, я запланировал процесс на «сейчас» с помощью команды at .Готово.

os.system("echo '/usr/bin/python /(somewhere)/scripts/backup/testbackup.py' | at now")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...