我正在尝试访问在不同文件中的while循环中不断更新的变量。这是我用于测试的代码:
META-INF
当我运行file2时,它从头开始启动while循环。我想访问x的一个实例。例如,如果x = 10,我希望file2打印10.这可能吗?
答案 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]