全局变量不会在外部进程的循环中更新
Global variable doesnt update on loop on external process
我一直在尝试通过创建一个我将数据放入其中的空对象来将数据传递到另一个进程的循环中。当我更改对象的内容时,该进程似乎没有更新,并保持返回相同的值。
这是我试过的一些代码:
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
我也试过每次从内存中删除对象并在下一个循环中重新定义它,但似乎没有任何效果,而是保留初始 "test" 值,当它出现时被执行了。
我假设你是 运行 这个程序 windows 因为你在程序中打开的子进程或线程独立于它们的父进程。所以你实际上不能像这样在进程之间共享数据。
当 运行 python 在 linux 时共享数据是可能的,因为派生进程是父进程的子进程,它可以共享数据。
为了能够在父进程和子进程之间共享数据,而不管底层 OS,你可以看到这个 link - How to share data between Python processes?
我一直在尝试通过创建一个我将数据放入其中的空对象来将数据传递到另一个进程的循环中。当我更改对象的内容时,该进程似乎没有更新,并保持返回相同的值。
这是我试过的一些代码:
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
我也试过每次从内存中删除对象并在下一个循环中重新定义它,但似乎没有任何效果,而是保留初始 "test" 值,当它出现时被执行了。
我假设你是 运行 这个程序 windows 因为你在程序中打开的子进程或线程独立于它们的父进程。所以你实际上不能像这样在进程之间共享数据。
当 运行 python 在 linux 时共享数据是可能的,因为派生进程是父进程的子进程,它可以共享数据。
为了能够在父进程和子进程之间共享数据,而不管底层 OS,你可以看到这个 link - How to share data between Python processes?