【发布时间】:2015-11-24 01:53:51
【问题描述】:
我有一个post_save 附加到一个模型,该模型在创建时通过来自外部 API 的 json 响应加载大量信息。不幸的是,这需要足够长的时间,以至于 heroku 在它有机会完成之前就超时了。
在做一些研究之后,似乎最好的方法是作为后台进程。
异步运行 post_save 信号的最佳方式是什么?
在阅读了有关 celery 的信息后,它对于一个进程来说似乎太重了。还有其他值得信赖的方法吗?
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 asynchronous heroku