在脚本的主线程中,我设置了一个名为 queue
的变量,并用 URL 填充它。然后,我使用 multiprocessing.Process
创建 8 个进程,然后这些进程分别使用 threading
库生成 10 个线程。
在线程工作线程(由上面的另一个进程生成)中,我有全局队列
。
那么queue.get()
会按预期运行吗?我已经尝试过,在某些测试中似乎没问题,而另一些测试则不然。
问题是,全局变量可以从另一个进程和线程访问吗?
最佳答案
很难理解你到底在问什么。但这里有两个主要问题:
可以从另一个进程访问全局变量吗?
不,没有某种形式的进程间通信,即使那样,您也会将该变量的副本传递给其他进程。每个进程都有自己的全局状态。
可以从另一个线程访问全局变量吗?
是的,位于同一进程中的线程可以访问全局变量,但必须确保多个线程访问的任何内存的安全性。这意味着,线程不应与其他线程同时访问可写内存,否则您将面临一个线程写入内存而另一个线程尝试读取内存的风险。
回答上述问题
如果我正确理解了设置,您的每个子进程都有自己的全局变量queue
。每个队列都应该只能由该进程中生成的线程访问。
关于python - 可以从新进程中的线程访问全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478932/