Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是django';什么是线程安全的?_Django_Multithreading_Thread Safety_Django Orm - Fatal编程技术网

是django';什么是线程安全的?

是django';什么是线程安全的?,django,multithreading,thread-safety,django-orm,Django,Multithreading,Thread Safety,Django Orm,我有一个python程序,它使用django的ORM访问数据库。该程序有不同的线程,每个线程都可能通过读或写来访问数据库。请注意,此程序不是web服务器 django的ORM线程安全吗? 它可以从同一解释器中的不同线程并行使用吗? 答案是否取决于事务管理模式?django版本?还有什么吗?是的 方法query、filter、get、exclude等。返回一个新的QuerySet对象,这样基本操作就完成了,在线程中执行查询不会有问题,因为它总是返回一个没有过去引用的新对象 禁用自动提交设置。您可能

我有一个python程序,它使用django的ORM访问数据库。该程序有不同的线程,每个线程都可能通过读或写来访问数据库。请注意,此程序不是web服务器

django的ORM线程安全吗?
它可以从同一解释器中的不同线程并行使用吗?
答案是否取决于事务管理模式?django版本?还有什么吗?

是的

方法query、filter、get、exclude等。返回一个新的QuerySet对象,这样基本操作就完成了,在线程中执行查询不会有问题,因为它总是返回一个没有过去引用的新对象

禁用自动提交设置。您可能会更频繁地使用事务和与select_相关的方法来避免常见的线程问题,如同时访问行


我建议您始终检查您的代码将返回一个新的QuerySet对象,不要将QuerySet作为函数中的参数发送,这样您就可以了。

根据我的理解,使用事务的线程安全性从1.6开始启用。因此,在django中,这可能取决于您的数据库驱动程序。我敢说,大多数都不是线程安全的。我难以置信的是,这样一个基本的问题没有一个清晰的、有文档记录的答案,我在下面的文本中找到:
,因为每个线程都保持自己的连接,您的数据库必须至少支持与工作线程相同数量的并发连接。
如果我理解正确,这可能会有点启发并带来一些希望……Django是一个web应用程序框架。线程安全并不是议程上的重点,因为每个web工作者都有自己的线程。您最好看看其他宣传线程安全的ORM。或者,您可以用不需要线程安全的方式编写代码。为什么要禁用默认的自动提交设置?我应该在什么时候提交查询?