python - Python - 使用全局模块在程序之间传递变量
问题描述
这里的用例是我有一个主程序不断循环以获取传感器数据并执行一些计算和逻辑。同时,我有第二个程序运行烧瓶与 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”,因此 globaltest.py 中的 statevar 不会被 stest.py 更新。
我似乎无法弄清楚为什么会这样,也不确定这是解决问题的最佳方法。我看过其他类似的问题,但这似乎是一个不同的用例。
解决方案
每个 Python VM维护“全局”状态(实际上是模块级状态)。如果您希望多个进程共享信息,那么您将需要使用某种形式的 IPC 或外部存储(DBus、邮槽、域套接字、共享内存、数据库服务器等)。
推荐阅读
- python - 一个脚本运行多个脚本
- android - 没有 webrtc 的 react-native 音频通话应用
- html - 如何使按钮与 Bootstrap 5 中其他表单元素的高度匹配?
- python-3.x - 将值浮动到包含空值的时间
- javascript - Extjs checkbox and textarea - how to disable the checkbox on scroll behavior of the textarea?
- javascript - 将 fetch api 结果传递给函数并使用函数中处理过的数据
- firebase - Flutter Firebase 获取记录 ID
- kubernetes - kubectl port-forward 错误输出中的这个 pod 字符串是什么?
- c# - System.Web.HttpApplication 中的夜间事件?它在一段时间后关闭,不执行定时事件
- mysql - 计数日期的子查询 - MYSQL