我已经在线阅读了许多备忘录的示例,但是仍然无法成功将其应用于我正在做的事情。我尽力使用自己的逻辑编写此代码的备注部分,但是根据我每次运行它的测试,它无法正常工作。下面是我的代码的一个简单版本的示例,我编写该代码只是为了测试记忆概念,因为我的实际代码需要一段时间才能运行。
import numpy as np
import time
good_data = np.array([1, 43, 22, 55, 14, 85, 23, 13, 4, 9, 21])
def image_urls(number):
img_urls, img_data = [], []
rows = 40
for row in range(rows):
path = '/%d1wxyz' % number
url = 'http' + path
img_urls.append(url)
for obj in img_urls:
for image in obj:
data_pts = np.array([[1, 1, 1], [2, 2, 2], [number, number, number]])
img_data.append(data_pts)
return img_urls, img_data
cached_urls, cached_data = {}, {}
def images_data_pts(image_urls):
t1 = time.time()
print(np.array_equal(np.array([int(n) for n in cached_urls.keys()]), good_data))
print(np.array_equal(np.array([int(n) for n in cached_data.keys()]), good_data))
if np.array_equal(np.array([int(n) for n in cached_urls.keys()]), good_data) == False or np.array_equal(np.array([int(n) for n in cached_data.keys()]), good_data) == False:
for number in good_data:
cached_urls[str(number)], cached_data[str(number)] = image_urls(number)
t2 = time.time()
print('Time elapsed = ' + str(t2-t1))
return cached_urls, cached_data
complete_urls, complete_data = images_data_pts(image_urls)
print(np.array_equal(np.array([int(n) for n in cached_urls.keys()]), good_data))
print(np.array_equal(np.array([int(n) for n in cached_data.keys()]), good_data))
运行脚本一次后,最后两个print
语句都输出True
,但是我希望在运行脚本一次之后将信息存储在缓存中,以便不必每次都实际执行函数正在执行的操作。我认为这可能与以下事实有关:每次运行它时,cached_urls
和cached_data
被重新定义为空字典,也许有效地撤消了备忘录。但是我在示例中看到了这种技术,并且不确定如何构造它。如果您有任何提示,请告诉我!
答案 0 :(得分:0)
程序启动时,它将以干净的状态开始。这是Unix和Windows共同工作的基础。 1 如果您希望从一次运行到将来的运行都可以保留任何东西,则需要将其存储在某个地方,然后再加载回去。
files部分的官方Python教程对此进行了介绍。
基本思想很简单:
{}
开头)。关于如何读写它:
我怀疑您的备忘录缓存基于名称({cached_urls
听起来像是将字符串映射到字符串……)。如果是这样,请按照本教程中的说明store it as JSON。如果不是,请参见pickle
模块,该模块具有相同的API,但可以处理JSON无法解决的问题。 2
1。试想一下是否是真的。每当您使程序崩溃时,重新启动它时,它的状态都将与崩溃时完全相同,因此几乎可以肯定会立即再次崩溃。唯一的恢复方法是卸载并重新安装。
2。对于要分发或部署的代码,这种灵活性可能会带来安全风险,但是对于仅使用来自您自己的计算机的数据运行代码的人来说,就可以了。