Python:从运行中的实例导入,或从其他实例导入



我有两个文件,data.py和interpreter .py.

data.py:

X = cPickle.load(open("X","r"))

interpret.py:

from data import X
query = raw_input("Enter query")
#do something with query and X

对象X,它非常大。我用cPickle倾倒了它。interpreter .py将被另一个程序调用,并且由于import当前的工作方式,每次执行interpreter .py时,它都会加载data.py,该py加载X,并且由于X非常大,因此需要花费大量时间。

我希望能做这样的事情。

data.py:

from time import sleep
X = cPickle.load(open("X","r"))
sleep(10**10) #Sleep for eternity
然后运行data.py

interpret.py:

from data import X #import from live instance of data.py
                   #don't load X all over again
query = raw_input("Enter query")
#do something with query and X

我该怎么做?如果不能从活动实例导入,是否有其他方法可以执行我想要执行的操作。我沟通的不是很好,请告诉我你不明白的地方,我会尽量进一步澄清

据我所知,您想要运行一个守护进程。例如,数据将作为一个独立的守护进程运行,而不是从interpret中导入数据,interpreter将通过套接字之类的东西与之通信。

但是在这一点上,你基本上已经写了一个数据库,所以为什么不把你拥有的任何数据转换成一些数据库,并与数据库通信呢?

编辑:问题是,你想要的巨大的对象之间的进程持续存在,但它不能像那样工作。每次调用explain时,都会生成一个新进程,这意味着无法访问前一个进程生成的对象。这就是为什么守护进程(和数据库)存在。

要让它以你想要的方式工作,你需要保持你的整个Python程序运行,而不是让你的其他程序每次执行解释器。py作为一个脚本,你需要设置它,使解释器。py执行一次,每次你的程序需要进行查询时,它使用现有的实例。py程序。

你可以对interpreter .py:

这样做
from data import X
while True:
    query = raw_input("Enter query")
    #do something with query and X

另一个程序可以在每次需要进行查询时,向正在运行的interpreter .py程序的stdin中写入一行。

最新更新