一尘不染

Django post_save信号是异步的吗?

django

我有一个“喜欢”功能,就像社交网络“喜欢”或“竖起大拇指”功能一样;用户单击星号/心形/任何内容以将内容标记为喜欢。它是用ajax完成的,并且必须快速。这里唯一的问题是,由于某些原因,我必须为每个“赞”执行一些任务,而我发现它们是在“赞”视图中直接编码的,这使其运行缓慢。我正在考虑使用信号来使这些任务的执行异步,以便视图可以立即将json发送回javascript,而无需等待任务完成。我开始为’like’创建一个信号,但后来意识到Django的信号不是异步的,并且最终会变得相同,视图将不得不等待该信号完成以发送回它的响应。


阅读 494

收藏
2020-04-02

共1个答案

一尘不染

你想要的是一个线程。它们非常易于使用。你只需继承threading.Thread并编写一个run方法:

import threading

class LikeThread(threading.Thread):
    def __init__(self, user, liked, **kwargs):
        self.user = user
        self.liked = liked
        super(LikeThread, self).__init__(**kwargs)

    def run(self):
        # long running code here

然后,当你准备好执行任务时,可以使用以下命令将其启动:

LikeThread(request.user, something).start()

其余的视图代码或其他任何内容将继续执行并返回响应,线程将很高兴地完成其工作,直到完成,然后结束自身。

2020-04-02