2010-09-27 2 views
2

Я использую Django, и я делаю несколько длительных процессов, с которыми я просто взаимодействую через свой веб-интерфейс. Например, они будут работать все время, проверяя значение базы данных каждые несколько минут и останавливаясь только в том случае, если это изменилось (было бы логическим значением true false). Итак, я хочу иметь возможность использовать Django для взаимодействия с ними, однако не знаю, как это сделать. Когда я использовал PHP, у меня был какой-то способ сделать это, подумайте, что было бы еще проще сделать в Python, но я не смог найти что-либо в этом при моих поисках.Django, Python вызывает код Python, не дожидаясь ответа?

В принципе, все, что я хочу сделать, это выполнить код python, не дожидаясь его завершения, поэтому он просто начинает выполнение, а затем выполняет все, что ему нужно для django, быстро возвращая новую страницу пользователь.

Я знаю, что есть способы вызвать внешнюю программу, поэтому я полагаю, что это единственный способ пойти? Есть ли способ сделать это, просто называя другой код Python?

Спасибо за любой совет.

+0

Возможный дубликат [как я могу поместить процесс в фоновом режиме с помощью django?] (Http://stackoverflow.com/questions/2872605/how-can-i-put-a-process-in-background-using- django) –

ответ

6

Не могу ручаться за это, потому что я еще не использовал его, но «Сельдерей» делает в значительной степени то, о чем вы просите, и был изначально построен специально для Django.

http://celeryproject.org/

Их пример показывает простую задачу сложения двух чисел:

from celery.decorators import task 

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

Вы можете выполнить задачу в фоновом режиме, или ждать его до конца:

>>> result = add.delay(8, 8) 
>>> result.wait() # wait for and return the result 
16 

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

+0

спасибо, да просто наткнулся на это, делая больше поисков, обязательно проверит это – Rick

0

Требуется асинхронный диспетчер сообщений. У меня есть a tutorial по интеграции Gearman с Django. Любой разборчивый объект Python может быть отправлен Gearman, который будет выполнять всю работу и публиковать результаты там, где вы хотите; в учебное пособие включены примеры отправки обратно в базу данных Django (также показано, как использовать ORM за пределами Django).