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

时间:2019-04-02 15:54:08

标签: python multithreading

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

在线程工作程序(由上面的另一个进程生成)中,我有global queue

然后queue.get()会按预期运行吗?我已经尝试过了,在某些测试中似乎还可以,而在其他测试中却没有。

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

1 个答案:

答案 0 :(得分:1)

很难理解您的确切要求。但是这里有两个主要问题:

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

否,并非没有某种形式的进程间通信,即使那样,您仍会将那个变量的副本传递给另一个进程。每个进程都有其自己的全局状态。

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

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

上面的答案

如果我正确理解设置,则您的每个子进程都有自己的全局变量queue。那些queues中的每一个都只能被该进程中产生的线程访问。