У меня есть post_save, прикрепленный к модели, которая загружает значительный объем информации через ответ json от внешнего API при его создании. К сожалению, это занимает достаточно много времени, чтобы герою время, прежде чем он когда-либо имеет шанс закончить.Как запустить Django post_save сигнал в качестве фонового процесса?
После нескольких исследований кажется, что лучший способ сделать это - фоновый процесс.
Каким будет асинхронный запуск сигнала post_save?
После прочтения сельдерея это кажется слишком тяжелым для одного процесса. Есть ли другие методы, которым доверяют?
from django.db.models.signals import post_save
import urllib2
import json
class Foobar(models.Model):
# ... fields ... #
def foobar_post_save(sender, instance, created, *args, **kwargs):
"""Load info from external API
data
----
sender - The model class. (Foobar)
instance - The actual instance being saved.
created - Boolean; True if a new record was created.
*args, **kwargs - Capture the unneeded `raw` and `using`(1.3) arguments.
"""
if created:
url_to_open = <api_url>
resp = urllib2.urlopen(url_to_open)
data = json.loads(resp.read())
# ... load data ... #
post_save.connect(foobar_post_save, sender=Foobar)
Я не уверен, что это может работать в этой ситуации. Поскольку django обрабатывает вызов сигналов post_save где-то в 'models.Model.save()' Я думаю, мне пришлось бы перегрузить этот метод для вызова '.start()' в процессе. Я надеялся, что будет что-то менее уродливое. – Ben
Ну, я не использую Heroku, и эта аналогичная вещь, которую я сделал, не включала сигнал post_save, поэтому я не думаю, что могу помочь вам намного дальше. Сожалею. –
Благодарим вас за ответ – Ben