gpt4 book ai didi

python - 在两个进程之间共享全局变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:12 24 4
gpt4 key购买 nike

我试图在两个单独的进程中同时运行两个 while 循环,其中第一个循环修改全局变量,另一个进程根据该变量做出决定。

我的问题是,在第一个进程完成之前未修改全局变量,因此第二个进程无法正确响应它。

这是我的代码:

flag = [False]
def loop1():
x = 0
while (x<10):
x = x + 1
read = input("Enter 0 or 1")
if read == 0:
flag[0] = False
else:
flag[0] = True
def loop2():
z = 0
while (z<100):
z = z + 1
if flag[0] == False:
# do something
else:
# do other thing
time.sleep(1)
if __name__ == '__main__':
Process(target = loop1).start()
Process(target = loop2).start()

最佳答案

进程不共享状态。您将需要使用类似于 multiprocessing.Queue 的共享队列,将队列对象作为参数提供给两个进程,并通过队列传递标志变量。

或者使用线程代替多处理,并且线程共享进程的地址空间并可以使用相同(引用)变量。

这两种方法各有利弊,请在 SO 上搜索线程与多处理以供引用。

在线程情况下,标志对象需要绑定(bind)到包含所有要使用它的生成线程的对象,例如在类中:

from __future__ import print_function
from threading import Thread
import time


class State(object):

def __init__(self):
self.flag = False
self.consumer_thread = Thread(target=self.check_flag)
self.consumer_thread.daemon = True
self.consumer_thread.start()

def read_input(self):
while True:
_read = input()
if _read == 0:
self.flag = False
else:
self.flag = True
time.sleep(1)

def check_flag(self):
while True:
if self.flag is True:
print("Is true")
# do stuff
time.sleep(1)

if __name__ == "__main__":
state = State()
state.read_input()

两个线程(主线程+消费者线程)引用同一个对象self.flag并共享self,即类对象的地址空间。

关于python - 在两个进程之间共享全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43785079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com