在脚本的主线程中,我设置了一个名为queue
的变量,并用URL填充了它。然后,我使用multiprocessing.Process
创建8个进程,然后使用threading
库分别产生10个线程。
在线程工作程序(由上面的另一个进程生成)中,我有global queue
。
然后queue.get()
会按预期运行吗?我已经尝试过了,在某些测试中似乎还可以,而在其他测试中却没有。
问题是,可以从另一个进程和线程访问全局变量吗?
答案 0 :(得分:1)
很难理解您的确切要求。但是这里有两个主要问题:
可以从另一个进程访问全局变量吗?
否,并非没有某种形式的进程间通信,即使那样,您仍会将那个变量的副本传递给另一个进程。每个进程都有其自己的全局状态。
可以从另一个线程访问全局变量吗?
是的,生活在同一进程中的线程可以访问全局变量,但是您必须确保多个线程访问的任何内存的安全性。意思是,线程不应与其他线程同时访问可写内存,否则冒着一个线程写入内存而另一个线程试图读取该内存的风险。
上面的答案
如果我正确理解设置,则您的每个子进程都有自己的全局变量queue
。那些queues
中的每一个都只能被该进程中产生的线程访问。