我有一个like功能,就像社交网络的喜欢或竖起大拇指的功能;用户点击明星/心/任何东西来标记内容为喜欢.这是用AJAX完成的,必须是快速的.

这里唯一的问题是,由于某些原因,我必须为每like个人做一些任务,我发现它们直接在like视图中编码,这会使速度变慢.

我正在考虑使用信号使这些任务的执行异步,这样视图就可以立即将json发回javascript,而无需等待任务完成.

我开始为like创建一个信号,但后来意识到Django的signals不是异步的,它将以同样的方式结束,视图将不得不等待信号完成才能发回它的响应.

因此,我可以try 使signal异步,就像这里和那里解释的那样,但是我也会对like模型使用post_save信号,但是现在我想知道视图是否可以在信号执行之前完成?

推荐答案

你想要的是一根线.它们很容易使用.您只需将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()

视图代码的睡觉或其他任何代码将恢复并返回响应,线程将愉快地执行其工作,直到完成,然后自行结束.

查看完整文档:http://docs.python.org/library/threading.html

Django相关问答推荐

Django逆转ForeignKey返回无

Django-无法显示基于字段值的元素

在Django的反向函数中添加动态URL

Django中的DateTimeField到DateField

如何在 Fargate 容器中运行的 Django 中使用 AWS SES?

Django Rest Framework 速率限制动态基于用户类型

Django 仅预取相关模型的最新对象

如何根据查询集中的条件返回多个聚合?

Django - 将 HTML 输出转换为变量

Django Facebook Connect 应用推荐

如何测试某个日志(log)消息是否记录在 Django 测试用例中?

如何获取 Django 模型来自的应用程序?

如何在Django中获取一个组的所有用户?

如何从 django 的 db 模型中获取字段类型字符串

UnicodeEncodeError:ascii编解码器无法编码字符

Django 和 VirtualEnv 开发/部署最佳实践

Python - 覆盖 __init__ 的最干净方法,其中在 super() 调用之后必须使用可选的 kwarg?

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

django-rest-framework 接受 JSON 数据?

Django中reverse()和reverse_lazy()的区别