我有一个“喜欢”功能,就像社交网络“喜欢”或“竖起大拇指”功能一样;用户单击星号/心形/任何内容以将内容标记为喜欢。它是用ajax完成的,并且必须快速。这里唯一的问题是,由于某些原因,我必须为每个“赞”执行一些任务,而我发现它们是在“赞”视图中直接编码的,这使其运行缓慢。我正在考虑使用信号来使这些任务的执行异步,以便视图可以立即将json发送回javascript,而无需等待任务完成。我开始为’like’创建一个信号,但后来意识到Django的信号不是异步的,并且最终会变得相同,视图将不得不等待该信号完成以发送回它的响应。
你想要的是一个线程。它们非常易于使用。你只需继承threading.Thread并编写一个run方法:
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()
其余的视图代码或其他任何内容将继续执行并返回响应,线程将很高兴地完成其工作,直到完成,然后结束自身。