这里的用例是我有一个主程序不断循环以获取传感器数据并执行一些计算和逻辑。与此同时,我有第二个程序运行烧瓶,twilio监听入站短信。我试图根据短信息的内容在第二个程序中设置一个变量,并根据该变量的值在第一个程序中运行逻辑。我已经定义了一个导入到两者中的模块,并且根据它的调用方式应该设置所需的值或返回它。
为了测试这个,我创建了一个精简版的“玩具”版本,它只有两个独立的循环程序和一个全局模块。它不像我期望的那样工作。
globaltest.py(全局模块)。
def varex(arg):
statevar = 0
if arg != 1:
statevar = arg
elif arg == 1:
return statevar
else:
return 'error'
main_test.py(代表第一个程序)
它正在调用以获取由stest设置的globaltest.varex中的statevar。
from globaltest import varex
from time import sleep
while True:
loc_var = varex(1)
print('local ',loc_var)
sleep(3)
stest.py(代表烧瓶服务器) 这是在globaltest.varex中设置statevar,在这种情况下只是简单地向上索引
from globaltest import varex
from time import sleep
i = 2
while True:
state = i
i = i+1
varex(state)
print(state)
sleep(1)
main_test始终打印“local 0”,因此stest.py不会更新globaltest.py中的statevar。
我似乎无法弄清楚为什么会这样,也不确定这是解决问题的最佳方法。我看过其他类似的问题,但这似乎是一个不同的用例。
答案 0 :(得分:1)
“全局”状态(实际上是模块级状态)按每个Python VM维护。如果您希望多个进程共享信息,那么您将需要使用某种形式的IPC或外部存储(DBus,邮件槽,域套接字,共享内存,数据库服务器等)。