python - 在 Python 语言中从多个线程访问变量

标签 python multithreading

在Python中使用多线程的情况下,为这段代码执行提供了哪些保证:

a=b

其中 a、b 是整数变量(即它们在 Python 编程语言中具有类“int”)。 “a”、“b”也是来自全局上下文的变量。

Q1:我认为没有必要将该指令翻译成类似“mov [a], [b]”(在 x86 中)的内容。如果在 ASM x86 中编写代码,则可以指定“lock mov [a], [b]”。当然,它太低级了,我敢打赌,像 Python 这样的脚本语言会在上面做很多指令。

但是,像 C++ 这样的语言仍然有 volatile关键字将限制编译器创建用于优化目的的指令,将变量存储在 CPU 寄存器中。

在 Python 语言中如何指定?可能吗?

Q2:对于这行代码,还有另一个问题,即使它有可能创建某种形式的易变行为(也许),但另一个问题是如何放置内存栅栏。对于使用 Python/Bash 而较少使用编译语言的人来说,线程可能在不同的 CPU 内核中执行,有时你可能没那么幸运,会从 CPU 内核缓存中读取不正确的值。在以 x86 或 ARM 指令翻译的编译语言中,归根结底是你负责,但对于 Python - 我不知道谁负责。

最佳答案

您不能对用 Python 编写的程序的执行做出任何一般性陈述,因为它在很大程度上取决于所使用的解释器(CPython、Jython、IronPython 等)的实现细节,或者程序使用的库。据我所知,Python 语言本身在这个级别上几乎没有做出任何 promise ,也没有公开任何相关机制,线程、进程、互斥锁等高级概念除外。

如果您担心程序的执行,那么不要只使用 Python。相反,您应该使用 C 或 C++ 实现代码库的关键部分,并使用 Python 绑定(bind)与这些组件进行交互。这样,您就可以使用更适合的编程语言在适当的级别管理内存和执行问题,同时还可以使用 Python 将大部分代码库联系在一起。

关于python - 在 Python 语言中从多个线程访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66919804/

相关文章:

python - 为 html 表提取 lxml xpath

C#:线程崩溃并蓝屏

c++ - thread::join 上是否存在具有同步关系的隐式内存屏障?

android - 无需轮询即可访问串行端口 (/dev/tty*) 传入数据

python - 防止 PyCharm 在 KeyboardInterrupt 等场合显示内置模块

python - python中的多面体边缘

python - 递归地展平 Python 中的不规则列表列表

python - pycurl.INFOTYPE_HEADER_OUT 有什么用?

C语言 : Parallel threads?

iphone - 从后台线程访问实例变量