gpt4 book ai didi

python - 我的 Python 代码中的内存问题

转载 作者:行者123 更新时间:2023-11-28 19:02:09 25 4
gpt4 key购买 nike

我已经在网上阅读了很多记忆化的例子,但仍然无法成功地将其应用到我正在做的事情中。我尽力使用我自己的逻辑编写这段代码的内存部分,但根据我每次运行它时的测试,它不起作用。下面是我的代码的一个简单版本示例,我编写它只是为了测试内存概念,因为我的实际代码需要一段时间才能运行。

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_urlscached_data 重新定义为空字典有关,也许有效地撤消了内存。但我在示例中看到了这种技术,我不确定我将如何构建它。如果您有任何提示,请告诉我!

最佳答案

当一个程序启动时,它是从一个干净的状态开始的。这是 Unix 和 Windows 工作方式的基础。1如果您希望任何东西从一次运行持续到 future 的运行,您需要将它存储在某个地方,然后加载回来。

files 中的官方 Python 教程对此进行了介绍部分。

基本思想很简单:

  • 程序启动后,立即打开文件并读取备忘录缓存(如果文件不存在,则以 {} 开头)。
  • 就在您的程序完成之前,以写入模式打开同一个文件并写入您的备忘录缓存。

至于如何读写:

我怀疑您的备忘录缓存是 JSON 兼容的,基于名称(cached_urls 听起来像是将字符串映射到字符串……)。如果是这样,store it as JSON ,如教程中所示。如果没有,请参阅 pickle 模块,它具有相同的 API,但可以处理 JSON 无法处理的事情。2


<子>1。想象一下,如果那不是是真的。任何时候你崩溃的程序,当你重新启动它时,它会出现与崩溃时完全相同的状态,所以几乎可以肯定会立即再次崩溃......恢复的唯一方法是卸载并重新安装。

<子>2。这种灵 active 可能会给您要分发或部署的代码带来安全风险,但对于您仅使用仅来自您自己的计算机的数据自行运行的代码来说,这很好。

关于python - 我的 Python 代码中的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51623807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com