Python:如何将变量保存在内存中,以便可以从其他python脚本中调用它?

时间:2016-07-04 15:27:49

标签: python

python中有一个名为tzwhere的模块。当我在tz变量中加载它时,如: -

from tzwhere import tzwhere
tz = tzwhere.tzwhere(shapely=True)

上面的行加载大约需要45秒,其范围是在特定的python会话停止之前。所以在这一行之后我可以得到尽可能多的tz.tzNameAt(latitude, longitude)输出,但问题是这些输出只能在那个python shell中快速计算。

我想让tz变量可以像API一样共享,这样如果从任何python会话调用tz变量,或者即使使用exec命令从任何java程序调用,也不应该花费45秒再次加载,也不应该它给了我NameError: name 'tz' is not defined

请帮助。非常感谢!!

2 个答案:

答案 0 :(得分:0)

您可以使用pickle模块,该模块可以将类实例存储在文件中。

尝试这样的事情:

 from tzwhere import tzwhere
 tz = tzwhere.tzwhere(shapely=True)

 import pickle

 # Dump the variable tz into file save.p
 pickle.dump( tz, open( "save.p", "wb" ) )

要从其他脚本加载tz,请执行以下操作:

import pickle

tz = pickle.load( open( "save.p", "rb" ) )
  

注意:仅Python 2将在Python3上自动使用更快的版本

     

如果您仍然对从其他脚本加载tz时的速度感到不满意,那么pickle的加速版本称为cPickle

     

只是做:

import cPickle as pickle

有关详细信息,请转到此链接:https://wiki.python.org/moin/UsingPickle

答案 1 :(得分:0)

即使在python关闭后,你也无法在内存中共享任何python对象。但是,您可以使用pickle保存对象的状态(如果库支持它,如果不支持,则此解决方案将不起作用)。 pickle是一个随python一起提供的库,可以将大多数对象的状态保存到文件中。

以下是泡菜的例子:

保存状态:

import pickle
obj = [1, 2, 3, 4]
f = open("/path/to/the/file/where/the/data/should/be/stored.pickle", 'wb')  # you do not have to use the suffix '.pickle' however.
pickle.dump(obj, f)
f.close()

要检索它:

import pickle
f = open("/path/to/the/file/where/the/data/should/be/stored.pickle", 'rb')
obj = pickle.load(f)
f.close()

或者就你的例子而言,运行一次这个东西:

from tzwhere import tzwhere
import pickle
f = open("/path/to/the/file", 'wb')
pickle.dump(tzwhere.tzwhere(shapely=True))
f.close()

并使用它来检索它:

import pickle
f = open("/path/to/the/file", 'rb')
tz = pickle.load(f)
f.close()

或者作为一个单行,因此它不会占用那么多空间:

import pickle;f=open("/path/to/the/file",'rb');tz=pickle.load(f);f.close()

我希望有所帮助,

CodenameLambda

PS:如果你想知道泡菜是如何工作的,只需看看the documentation