据说Python会自动管理内存。我很困惑,因为我有一个Python程序始终使用超过2GB的内存。
这是一个简单的多线程二进制数据下载和解包程序。def GetData(url):
req = urllib2.Request(url)
response = urllib2.urlopen(req)
data = response.read() // data size is about 15MB
response.close()
count = struct.unpack("!I", data[:4])
for i in range(0, count):
UNPACK FIXED LENGTH OF BINARY DATA HERE
yield (field1, field2, field3)
class MyThread(threading.Thread):
def __init__(self, total, daterange, tickers):
threading.Thread.__init__(self)
def stop(self):
self._Thread__stop()
def run(self):
GET URL FOR EACH REQUEST
data = []
items = GetData(url)
for item in items:
data.append(';'.join(item))
f = open(filename, 'w')
f.write(os.linesep.join(data))
f.close()
有15个线程正在运行。每个请求获取15MB的数据并将其解压缩并保存到本地文本文件中。这个程序怎么能消耗超过2GB的内存?在这种情况下,我需要做任何内存回收工作吗?如何查看每个对象或函数使用了多少内存?
如果您能给我一些关于如何使python程序保持在内存高效模式下运行的建议或技巧,我将不胜感激。
编辑:这里是“cat/proc/meminfo”的输出MemTotal: 7975216 kB
MemFree: 732368 kB
Buffers: 38032 kB
Cached: 4365664 kB
SwapCached: 14016 kB
Active: 2182264 kB
Inactive: 4836612 kB