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

Python 全局变量可以从新进程中的线程访问吗?,python,multithreading,Python,Multithreading,在脚本的主线程中,我设置了一个名为queue的变量,并用URL填充它。然后我使用multiprocessing.Process创建8个进程,然后这些进程使用threading库生成10个线程 在线程工作进程中(由另一个进程按照上面所述生成),我有全局队列 然后,queue.get()会按预期的方式工作吗?我试过了,在一些测试中似乎还可以,而在其他测试中则不行 问题是,是否可以从另一个进程和线程访问全局变量?很难理解您到底在问什么。但这里有两个主要问题: 可以从另一个进程访问全局变量吗? 不,不是

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

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

然后,
queue.get()
会按预期的方式工作吗?我试过了,在一些测试中似乎还可以,而在其他测试中则不行


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

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

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

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

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

是的,生活在同一进程中的线程可以访问全局变量,但必须确保多个线程访问的任何内存的安全性。这意味着,线程不应与其他线程同时访问可写内存,否则,当另一个线程试图读取内存时,一个线程可能会写入内存

回答上述问题


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

新线程是由一个新进程生成的,即全局变量可以从另一个进程和线程访问。由不同进程生成的线程无权访问相同的全局变量。所以,如果在进程Pa中生成线程Ta,在进程Pb中生成线程Tb,Ta和Tb将不会有任何可共享的全局状态,因为它们属于不同的进程。