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
。
请帮助。非常感谢!!
答案 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。