python - 可以从新进程中的线程访问全局变量吗?

标签 python multithreading

在脚本的主线程中,我设置了一个名为 queue 的变量,并用 URL 填充它。然后,我使用 multiprocessing.Process 创建 8 个进程,然后这些进程分别使用 threading 库生成 10 个线程。

在线程工作线程(由上面的另一个进程生成)中,我有全局队列

那么queue.get()会按预期运行吗?我已经尝试过,在某些测试中似乎没问题,而另一些测试则不然。

问题是,全局变量可以从另一个进程和线程访问吗?

最佳答案

很难理解你到底在问什么。但这里有两个主要问题:

可以从另一个进程访问全局变量吗?

不,没有某种形式的进程间通信,即使那样,您也会将该变量的副本传递给其他进程。每个进程都有自己的全局状态。

可以从另一个线程访问全局变量吗?

是的,位于同一进程中的线程可以访问全局变量,但必须确保多个线程访问的任何内存的安全性。这意味着,线程不应与其他线程同时访问可写内存,否则您将面临一个线程写入内存而另一个线程尝试读取内存的风险。

回答上述问题

如果我正确理解了设置,您的每个子进程都有自己的全局变量queue。每个队列都应该只能由该进程中生成的线程访问。

关于python - 可以从新进程中的线程访问全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478932/

相关文章:

Python: reshape 具有多个索引的数据框

python - 删除具有 >N NaN 的列,不包括特定列

python - 线程锁-何时真正需要?

c - 从一个线程切换到另一个出现段错误

java - Java VM 在 Linux 中可以支持多少个线程?

python - XlsxWriter 设置全局字体大小

python - 使用与虚拟环境不同的 python 版本运行的 Azure 函数

python - 在 ubuntu 中为 python 和 c++ 集成 opencv 3.0.0 并使用 cmake 构建库

java - 我如何在 Java 中并行运行一些东西?

java - 如何在不干扰程序 UI 的情况下播放声音?