python - 静态方法和线程安全

标签 python django thread-safety

在具有“一切皆对象”思想的 Python 中,线程安全在哪里?

我正在用 wsgi 开发 django 网站。它也可以在 linux 上运行,而且据我所知,它们使用有效的进程管理,所以我们不能过多地考虑线程安全。我不怀疑模块是如何加载的,函数是否是静态的?每条信息都会有所帮助。

最佳答案

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

这适用于对共享数据的访问是否发生在模块函数、静态方法或实例方法中——共享数据是这样的,无论它是实例变量、类变量还是全局变量(作用域和线程安全本质上是不相交的,除了函数本地数据,从某种意义上说,本质上是线程安全的——没有其他线程会看到函数实例中的数据,除非函数有意通过共享容器“共享”它。

如果您使用 Python 标准库中的 multiprocessing 模块,而不是 threading 模块,您实际上可能不必关心“线程安全”——本质上因为没有数据在进程之间共享......好吧,除非你不厌其烦地改变它,例如通过 mmapped 文件;-).

关于python - 静态方法和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115420/

相关文章:

python - 来自 Amazon.com(和 Amazon.in)的程序化结账

python - 如何在 Django 中使用反向获取完整 url

python - 如何在 jinja2 中包装一个 block

python - 使用更改django模板中表单字段的名称属性

fortran - Fortran 中的循环变量是否已保存?

c++ - 在以下情况下,当 cond 为真时,锁会发生什么情况?

java - 如何从Jform调用另一个线程运行方法

python - Web 套接字/Tornado - 通知客户端数据库更新

Python:快速残差计算

python - 无法使用 pip install 通过命令提示符安装 .whl 文件