首页 > 解决方案 > 全局变量不会在外部进程的循环中更新

问题描述

我一直在尝试通过创建一个将数据放入其中的空对象将数据传递到另一个进程中的循环中。当我更改对象的内容时,该进程似乎没有更新,并且一直返回相同的值。

这是我尝试过的一些代码:

from multiprocessing import Process
from time import sleep


class Carrier():  # Empty object to exchange data
    pass


def test():
    global carry
    while True:
        print(carry.content)
        sleep(0.5)

carry = Carrier()
carry.content = "test"  # Giving the value I want to share

p = Process(target=test, args=())
p.start()
while True:
    carrier.content = input()  # Change the value from the object

我也尝试过每次从内存中删除对象并在下一个循环中重新定义它,但似乎没有任何效果,而是保留了初始的“测试”值,即执行时存在的值。

标签: pythonpython-3.xmultithreadingmultiprocessingpython-3.7

解决方案


我假设您在 Windows 上运行该程序,因为您在程序中打开的子进程或线程独立于它们的父进程。所以你实际上不能像这样在进程之间共享数据。

在 Linux 上运行 python 时可以共享数据,因为生成的进程是父进程的子进程,它可以共享数据。

为了能够在父进程和子进程之间共享数据而不考虑底层操作系统,您可以查看此链接 -如何在 Python 进程之间共享数据?


推荐阅读