静态方法和线程安全

app*_*orm 3 python django thread-safety

在python中,所有这些"一切都是对象"的想法在哪里是线程安全的?

我正在用wsgi开发django网站.它也适用于linux,因为我知道他们使用有效的流程管理,所以我们无法考虑线程安全.我不怀疑模块是如何加载的,而且函数是否是静态的?每一条信息都会有所帮助.

Ale*_*lli 8

模块中的函数等同于类中的静态方法.当多个线程可能正在修改共享数据时,甚至一个线程可能正在修改这些数据而其他线程正在读取它时,就会出现线程安全问题; 最好通过使一个模块拥有数据(通过其他人的Queue.Queue访问)来避免,但是当这不可行时,你必须求助于锁定和其他更复杂的同步原语.

这适用于对共享数据的访问是在模块函数,静态方法还是实例方法中发生的 - 并且共享数据是这样的,无论是实例变量,类还是全局变量(范围和线程安全本质上是不相交的,除了该函数) - 本地数据本质上是线程安全的 - 没有其他线程会在函数实例中看到数据,除非函数故意通过共享容器"共享"它.

如果你multiprocessing在Python的标准库中使用模块而不是threading模块,你实际上可能不必关心"线程安全" - 主要是因为没有数据在进程之间共享......好吧,除非你不在路上改变这一点,例如通过mmapped文件;-).