【问题标题】:Is Django's "Model" API thread-safe?Django 的“模型”API 是线程安全的吗?
【发布时间】:2013-10-23 18:31:48
【问题描述】:

具体来说,我只是在谈论跨线程修改模型的单独实例(不共享相同的确切实例)。但是从一个线程调用 save() 是否安全,而多个其他线程正在调用 Model.objects.query() 或 Model.objects.get() 例如?

【问题讨论】:

  • 什么叫安全?以及我们在谈论什么数据库后端和事务隔离级别?
  • MySql + 读未提交。我所说的“安全”主要是指内存中的 Django 数据结构不会被破坏(即,由于共享全局状态被多个线程修改)——本质上,我只担心可能会特别出现的错误类别使用 python 线程,而不是说同时运行多个独立服务器。

标签: python django multithreading thread-safety


【解决方案1】:

就我们所说的保存与获取和查询而言,您是安全的,因为涉及不同的查询集对象。实际上,每一次queryfilterget 等调用都会创建一个新的查询集实例,并且不会修改任何以前存在的对象。

但显然,当从多个线程/客户端同时访问/修改相同的数据库记录时,您可能会遇到问题。

我记得,为了处理数据库更新的一致性,在禁用自动提交的 oracle db 和 mysql inndodb 中有一个 select for update 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多