Python 内存错误:内存不足
我编写了一个程序来下载应用程序、电影和其他内容。但当我运行该程序时,会出现以下错误:Python 内存错误:内存不足,python,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) MemoryErr
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
数据是下载电影和其他视频数据的变量
锉成锉
写入(数据)将数据放入文件中
tidopy是我的程序名
我怎样才能修好它
帮助。您似乎正在从url下载文件并将其写入文件,但在此期间,您希望
数据
保存整个文件,这会发生在计算机内存(页面文件的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\u size=total\u length/100
,这意味着每次data
中的下载量达到1%时,它都会写入文件,然后它会被下一个1%的数据替换,因此它总是占用存储在内存中的数据的1%。如果您下载的文件太大,即使在内存中只有1%也无法处理,则应将块大小
替换为固定的字节数,可能是1000000(约为1MB)看起来您是从url下载文件并将其写入文件,但在此期间,您希望数据
保存整个文件,当文件很大(如电影)时,计算机内存(页面文件的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\u size=total\u length/100
,这意味着每次data
中的下载量达到1%时,它都会写入文件,然后它会被下一个1%的数据替换,因此它总是占用存储在内存中的数据的1%。如果您下载的文件太大,以至于内存不足1%,您应该将块大小
替换为固定的字节数,可能是1000000(约为1MB)您有多少内存?您期望的响应有多大>?问题不在于您的代码-您下载的数据超出了计算机的处理能力。尝试下载并处理较小的数据。如何?我可以将数据逐行写入文件吗?您有多少内存?您期望的响应有多大>?问题不在于您的代码-您下载的数据超出了计算机的处理能力。尝试下载并处理较小的数据块。如何?我可以在文件中逐行写入数据吗?没有,当我使用linux时,我使用了这个程序,但当我安装windows时,我发现这个错误windows比linux占用更多内存,因此下载大文件的可用内存更少。但是,即使您的内存是现在的100倍,如果您可以一块一块地编写整个大文件并释放内存负担,那么将整个大文件加载到内存中将是非常糟糕的做法。您认为浏览器或torrent客户端如何下载大文件?通过在chuck之后将其写入磁盘,而不是加载到memoryno当我使用linux时,我使用了这个程序,但当我安装windows时,我发现这个错误windows比linux占用更多内存,因此下载大文件的可用内存更少。但是,即使您的内存是现在的100倍,如果您可以一块一块地编写整个大文件并释放内存负担,那么将整个大文件加载到内存中将是非常糟糕的做法。您认为浏览器或torrent客户端如何下载大文件?通过在卡盘之后将数据块写入磁盘,而不是加载到内存中