Django, Python вызывает код Python без ожидания ответа? - PullRequest
2 голосов
/ 27 сентября 2010

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 27 сентября 2010

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

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

0 голосов
/ 29 сентября 2010

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

...