内存错误:内存不足

2024-10-01 13:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个程序下载应用程序,电影和其他。但是当我运行它时会出现以下错误:

Traceback (most recent call last):
  File "tidopy.py", line 27, in <module>
data=urllib2.urlopen(addresslist[x]).read()
  File "C:\Python27\lib\socket.py", line 362, in read
  buf.write(data)
MemoryError: out of memory

我认为这个错误是关于这个代码的:

^{pr2}$

数据是一个变量,用于下载电影和其他数据

文件就是文件

以及文件.写入(data)将数据放入文件中

tidopy是我的程序名。。在

我怎样才能修好它?在

救命啊。在


Tags: 文件数据inpy程序应用程序readdata
1条回答
网友
1楼 · 发布于 2024-10-01 13:44:09

看起来你从一个url下载文件并将其写入一个文件,但在此期间,你希望data保存整个文件,这发生在你的计算机内存(pagefile的RAM)中,当文件很大(比如电影)时,内存就会耗尽。在

解决方案是在下载时写入每个文件块,而不是将整个文件加载到内存中,然后再写入。我有一个小代码可以做到这一点,如果你想使用它:

import requests # just a choice of comfort for me
def download(url_address, filename):
    response = requests.get(url_address, stream=True)
    response.raise_for_status()
    with open(filename, "wb") as f:
        total_length = response.headers.get('content-length')
        if total_length is None:
            f.write(response.content)
        else:
            total_length = int(total_length)
            for data in response.iter_content(chunk_size = total_length / 100):
                f.write(data)

如果您注意到了,我已经设置了chunk_size = total_length / 100,这意味着每当{}中的下载量达到1%时,它就会写入文件,然后被下一个1%的数据替换,因此它总是占用内存中存储的数据的1%。如果您正在下载的文件太大,甚至无法处理内存中的1%,则应将chunk_size替换为固定的字节数,可能是1000000(大约为1MB)

相关问题 更多 >