基于 Django 类的 View - 线程安全

标签 django multithreading

我对 Java Web 应用程序有一些经验。在 servlet 中,您必须将基于类的属性声明为 Final,因为它不是线程安全的。

当我尝试与基于 Django 类的 View 进行比较时。假设下面的代码是线程安全的吗?我相信它是线程安全的,但有人让我知道了 Django 中的多线程应用程序需要注意的事项列表。

class MyFormView(View):
    form_class = MyForm
    initial = {'key': 'value'}
    template_name = 'form_template.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        person = Person()
        if form.is_valid():
            # <process form cleaned data>
            return HttpResponseRedirect('/success/')

        return render(request, self.template_name, {'form': form})

编辑-1

创建一个新类并在 POST 方法中启动

类人(对象): 名称 = '样本'

最佳答案

基于类的 View 上的类属性在所有线程之间共享,并且通常不是线程安全的。您应该将类​​属性视为只读属性,这也是 Django 所做的。这意味着您可以将 initial 设置为字典,但永远不应该修改该字典。对于传递给 View.as_view() 的参数也是如此。

实例属性是线程安全的。每次调用 View 时,都会创建 View 类的新实例,该实例永远不会在线程之间共享。这意味着您可以设置和修改实例属性,例如 self.object,而不必担心并发线程。

关于基于 Django 类的 View - 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34384604/

相关文章:

python - Django 单元测试 Sekizai 和 django cms

python - Django:当应用看起来很耦合时,如何将它们完全解耦?

python - 为什么 Django 试图打开我没有告诉它的 URL?

django - 分组依据和组中的不同值

multithreading - 寻找无锁的RT安全单读取器单写入器结构

c# - 在一种方法中锁定某个对象是否也会使其在其他方法中锁定?

c - pthread_create segfault(缓冲读取器示例)

django - 在 django 中使用电子邮件作为用户名

java - If..Else 语句在 JFrame 程序中的行为不可预测(不确定?)

java - IF 语句只有在它前面有一个它正在测试的值的 'sysout' 时才会执行