gpt4 book ai didi

python - Python 全局变量是线程安全的吗?

转载 作者:IT老高 更新时间:2023-10-28 13:37:33 28 4
gpt4 key购买 nike

编辑:我询问全局变量在像 Tornado 这样的单线程 Web 框架中是否安全

我使用 mongoengine orm,它从全局变量获取数据库连接:

_get_db() # gets the db connection

我也在使用 tornado,一个单线程的 python web 框架。在一个特定的 View 中,我需要获取数据库连接并取消引用 DBRef 对象[类似于外键]:

# dereference a DBRef
_get_db().dereference(some_db_ref)

由于_get_db返回的connection是一个全局var,是否有可能发生冲突,将错误的值返回给错误的线程?

最佳答案

在与 Python 对象交互时,总是需要线程来保存 GIL。保存变量的命名空间是一个 Python 对象(frameobject 或 dict,取决于它是什么类型的变量。)在多个线程中获取或设置变量总是安全的。你永远不会得到垃圾数据。

但是,通常的竞争条件确实适用于您获得哪个对象,或者您在分配时替换哪个对象。像 x += 1 这样的声明不是线程安全的,因为不同的线程可以在 get 和 store 之间运行,从而改变 x 的值,然后你会覆盖它。

关于python - Python 全局变量是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248434/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com