Django, Python вызывает код Python, не дожидаясь ответа?

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

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

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

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


person Rick    schedule 27.09.2010    source источник
comment
возможный дубликат как я могу перевести процесс в фоновый режим, используя джанго ?   -  person S.Lott    schedule 28.09.2010


Ответы (2)


Не могу поручиться за это, потому что я еще не использовал его, но «Сельдерей» делает почти то, о чем вы просите, и изначально был создан специально для 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, чтобы он заработал, поэтому это может быть более сложное решение, чем вы ищете, но оно достигнет ваших целей.

person dkamins    schedule 27.09.2010
comment
спасибо, да, просто наткнулся на это в поиске, обязательно проверю - person Rick; 27.09.2010

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

person Elf Sternberg    schedule 29.09.2010