Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 内存错误:内存不足_Python - Fatal编程技术网

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客户端如何下载大文件?通过在卡盘之后将数据块写入磁盘,而不是加载到内存中