如何在 Django 中的每个 save() 之后推迟要完成的方法?

How to postpone a method to be done after each save() in Django?

我正在使用 Django 1.8.4。有一个 Link 模型允许用户向网站添加 link。然后我使用 pyfav 从插入的 URL 中获取图标。我在我的 save() 方法中调用了 get_favicon_url 方法,因此它导致几乎长时间等待执行此任务以保存对象并重定向到成功 URL.

models.py

from pyfav import get_favicon_url

class Link(models.Model):
    url         = models.URLField("URL")
    ...

    def save(self, *args, **kwargs):
        ...
        self.favicon = get_favicon_url(self.url)
        super(Link, self).save(*args, **kwargs)

现在我正在寻找一种方法来推迟 self.favicon = get_favicon_url(self.url) 在 link 被保存并重定向到成功视图之后完成,因为它不是一个非常重要的字段需要填写并且它可以在 link 保存后几秒钟在后台完成。

这种工作要用Celery来完成吗?如果有任何关于如何实施它的提示,我将不胜感激,因为我没有任何经验。

在任务队列中使用像 Celery 这样的任务调度程序并延迟 favicon 的处理。

我已经为这个 http://mpcabd.igeex.biz/python-celery-asynchronous-task-decorator/ 做了一个 python 装饰器,它可以帮助你理解它是如何工作的,如果你使用这个装饰器,你可以让你的代码清晰并且不会重复恕我直言。