使用 django 访问数据库的线程安全方法

Posted

技术标签:

【中文标题】使用 django 访问数据库的线程安全方法【英文标题】:Threadsafe way to access database using django 【发布时间】:2012-08-20 13:35:44 【问题描述】:

据我所知,经验丰富的线程无法共享django db 连接。

我搜索了一下,发现了两个解决这个问题的方法:

    直接使用SQL连接,直接使用相关的DBMS驱动。 使用sqlalchmeny 及其会话轮询。

真的没有别的办法了吗?是不是可以让django 为线程创建新的连接(听起来很简单,对我有用!)

谢谢。

【问题讨论】:

【参考方案1】:

数据库的线程安全问题与连接无关;当两个线程尝试同时更改同一条数据时,甚至一个线程尝试写入而另一个线程尝试读取。为了防止这种情况,您只需要在您的一个线程需要对其执行某些操作时锁定该表。使用 Django 1.4+ 的一种快速简便的方法是使用 select_for_update,它会锁定表,直到您执行 update 操作。

【讨论】:

谢谢,当一些其他线程试图写入锁定表时会发生什么?有排队吗?

以上是关于使用 django 访问数据库的线程安全方法的主要内容,如果未能解决你的问题,请参考以下文章

java多线程之线程安全

什么是线程安全?

Java虚拟机--线程安全和锁优化

线程安全与锁

如何创建线程?如何保证线程安全?

不会吧,你连Java 多线程线程安全都还没搞明白,难怪你面试总不过