0

我有 2 个文件,data.py 和interpret.py。

数据.py:

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

解释.py:

from data import X
query = raw_input("Enter query")

#do something with query and X

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

我希望能够做这样的事情。

数据.py:

from time import sleep
X = cPickle.load(open("X","r"))
sleep(10**10) #Sleep for eternity

然后运行 ​​data.py

解释.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

我怎样才能做到这一点?如果我无法从实时实例导入,是否有替代方法来做我想做的事情。我不是很好沟通,请告诉我您不了解哪些部分,我将尝试进一步澄清。

4

2 回答 2

1

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

但是此时您基本上已经编写了一个数据库,那么为什么不将您拥有的任何数据转换到某个数据库中并与数据库进行通信呢?

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

于 2013-05-31T20:26:06.910 回答
1

为了让它以你想要的方式工作,你需要让你的整个 Python 程序运行,而不是让你的其他程序在每次需要设置它时执行解释.py 作为脚本,以便执行一次解释.py 并且每次您的程序需要进行查询时,它都会使用现有的 instance.py 程序。

你可以对解释.py 做这样的事情:

from data import X
while True:
    query = raw_input("Enter query")

    #do something with query and X

然后,您的其他程序可以在每次需要进行查询时向它正在运行的 translate.py 程序的标准输入写入一行。

于 2013-05-31T20:27:14.630 回答