如何访问while循环中正在更新的变量

时间:2016-08-22 14:57:04

标签: python while-loop

我正在尝试访问在不同文件中的while循环中不断更新的变量。这是我用于测试的代码:

META-INF

当我运行file2时,它从头开始启动while循环。我想访问x的一个实例。例如,如果x = 10,我希望file2打印10.这可能吗?

2 个答案:

答案 0 :(得分:2)

我不太清楚你的意思。你想要运行file1,并增加" x"的值每2秒,无限期地,当你随时运行file2时,它会拉出" x"的当前值。从运行" file1"?

的程序/ python实例

如果是这样,这不是你接近它的方式。使用file2,您将从file1中提取设置变量x = 0。您需要做的是使用某种形式的IPC(进程间通信),以便file2可以访问" x"的值。来自file1。您可以通过多种方式执行此操作,包括共享内存,redis或memcached等键/值存储程序,数据库等。

如果你想通过redis或memcached来做,只需运行redis,使用redis库进行Python,并调用.incr方法获取密钥" x"每2秒。然后,当你运行file2时,为key" x"调用.get方法。你会得到当前的价值。当file1运行时,它将继续递增x;如果不是,它就会赢,并且会有效冻结。但是,redis会将关键字" x"。

的最后一个已知值保留在内存中

要使用数据库,您可以实现mySQL数据库/表并增加" x"的值。每2秒在表中的一个键列中。您必须查看Python的mySQL库。

要使用共享内存,请查看Python的共享内存函数。

还有许多其他方式来共享数据。你可以简单地写出" x"的价值。通过打开它,每2秒写一个文件,写入新值,刷新并关闭它。然后只需让file2读取该文件。当然,这样你就会遇到竞争条件的问题,它在更新之前读取文件并得到一个陈旧的值,所有这些都取决于操作系统的优先级。文件系统当时从该进程写入该文件。

答案 1 :(得分:1)

您可以尝试以下操作。首先,由于存在和无限循环,导入file1将被阻塞,因此您应该在一个线程中运行循环。第二,你可以在列表(或任何其他类型的对象)中包含递增的整数,因此您可以使用对其当前值的引用(否则您将导入值而不是引用):

# file1    
import time
import threading

x = [0]

def update_var(var):
    while True:
        var[0] += 1
        time.sleep(2.0)

threading.Thread(target=update_var, args=(x,)).start()

# file2
from file1 import x
print x[0]