Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用全局模块在程序之间传递变量_Python - Fatal编程技术网

Python-使用全局模块在程序之间传递变量

Python-使用全局模块在程序之间传递变量,python,Python,这里的用例是我有一个持续循环的主程序来获取传感器数据并执行一些计算和逻辑。同时,我有第二个程序运行flask,twilio监听入站sms消息。我试图根据sms消息的内容在第二个程序中设置一个变量,并根据该变量的值在第一个程序中运行逻辑。我已经定义了一个导入到这两个模块中的模块,根据它的调用方式,它应该设置所需的值或返回它 为了测试这一点,我创建了一个精简的“玩具”版本,它只有两个独立的循环程序和一个全局模块。它没有按我预期的方式工作 globaltest.py(全局模块) main_test.p

这里的用例是我有一个持续循环的主程序来获取传感器数据并执行一些计算和逻辑。同时,我有第二个程序运行flask,twilio监听入站sms消息。我试图根据sms消息的内容在第二个程序中设置一个变量,并根据该变量的值在第一个程序中运行逻辑。我已经定义了一个导入到这两个模块中的模块,根据它的调用方式,它应该设置所需的值或返回它

为了测试这一点,我创建了一个精简的“玩具”版本,它只有两个独立的循环程序和一个全局模块。它没有按我预期的方式工作

globaltest.py(全局模块)

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(代表flask服务器) 这是在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_测试始终打印“local 0”,因此globaltest.py中的statevar不会被stest.py更新


我似乎不明白这是为什么,也不确定这是解决问题的最佳方法。我已经研究了其他类似的问题,但这似乎是一个有点不同的用例。

每个Python VM都维护“全局”状态(实际上是模块级状态)。如果希望多个进程共享信息,则需要使用某种形式的IPC或外部存储(DBU、邮箱、域套接字、共享内存、数据库服务器等)。

它们是两个不同系统上的两个不同进程,都导入一个模块。仅仅因为模块在两者中都使用并不意味着你可以访问它的变量?我想我是在同一个环境中运行的。两者都在同一文件夹中,在每个终端中,我在运行main_test.py和stest.py之前启动一个虚拟环境。如果这实际上启动了两个不同的环境,我看到了问题所在,但是如何确保它们在同一个环境中运行呢。每个虚拟机一个程序,每个进程一个虚拟机。看起来我可以简单地用SharedArray解决这个问题:-)
from globaltest import varex
from time import sleep

i = 2

while True:

    state = i
    i = i+1

    varex(state)

    print(state)

    sleep(1)