当前位置: 首页 > 面试题库 >

Django post_save信号是异步的吗?

吴宏扬
2023-03-14
问题内容

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


问题答案:

你想要的是一个线程。它们非常易于使用。你只需继承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()

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



 类似资料:
  • 问题内容: https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options。我也有一个一般性的问题。 我是否可以假设,除非文档中另有说明,否则提及的任何函数都是异步的? 问题答案: createreadstream是异步的吗? 是的,没有。这个问题实际上是一个语义问题,而不是任何问题,因为它在同步外观界面下隐藏了一个异步操作。

  • 我希望我的请求触发一些长时间运行的操作,这些操作应该在后台执行。我编写了以下实现,应该在后台处理我的操作,但实际上我的请求是同步执行的: 在日志中,我看到以下内容: 我看到我的在另一个线程中执行,但出于某种原因,我的原始请求等待sleep完成 更新1:

  • 问题内容: 是功能异步? 问题答案: 不,所有呼叫都是同步的。

  • 问题内容: 我能指望每次调用doSomething()时完成的nodeID映射吗? 我以为node.js中的所有回调都是异步的?我确实读过一篇关于通用编程的文章,说回调可以是同步的,但是我不确定node.js吗? 问题答案: JavaScript也是一种功能编程语言。您在这里拥有的是“高阶函数”,该函数将函数作为参数。高阶函数是同步的(但请参见下面的注释)。 资料来源: 功能编程 JavaScri

  • 我目前正在阅读Trevor Burnham的Async Javascript。到目前为止这是一本很棒的书。 他谈到这个片段和console.log在Safari和Chrome控制台中是“异步”的。不幸的是我无法复制这个。代码如下: 如果这是异步的,我会预期结果是books的结果。将console.log()放在事件队列中,直到所有代码执行完毕,然后运行它,它将具有bar属性。 虽然它是同步运行的,

  • 问题内容: 我想知道是否应该在我的网站上使用异步调用。我知道要明确指定我需要使用的 但是起初我尝试使用,尽管服务器必须返回很多信息,但是我的浏览器没有卡死,并且可以毫无问题地导航。 我在网上搜索了一下,但是我仍然不确定100%两者之间的区别。 如果是异步的,那有什么意义呢?如果不是,那么再次看到我的导航没有问题,使用的目的是什么? 提前致谢 问题答案: 是的,是异步的。从文档中: 这是Ajax的简