相关疑难解决方法(0)

我怎样才能在Python中明确释放内存?

我写了一个Python程序,它作用于一个大的输入文件,创建了几百万个表示三角形的对象.算法是:

  1. 读取输入文件
  2. 处理文件并创建由顶点表示的三角形列表
  3. 以OFF格式输出顶点:顶点列表,后跟三角形列表.三角形由顶点列表中的索引表示

在打印三角形之前打印出完整的顶点列表的OFF的要求意味着在将输出写入文件之前我必须在内存中保存三角形列表.与此同时,由于列表的大小,我遇到了内存错误.

告诉Python我不再需要某些数据的最佳方法是什么,它可以被释放?

python memory memory-management

338
推荐指数
9
解决办法
42万
查看次数

随着时间的推移增长python进程内存

我的python代码进程内存动态增加,因为它在必要时将动态数据存储在列表,字典和元组中.虽然在那之后所有这些动态数据都在其变量中被物理清除,但内存并没有被击落.

因此,我觉得有一个内存泄漏,我使用gc.collect()方法收集所有不同意的内存.但是当变量中没有数据时,我无法将内存降至最低.

python memory-management

8
推荐指数
1
解决办法
3066
查看次数

通过sqlalchemy重复插入sqlite数据库会导致内存泄漏?

当通过to_sqlsqlalchemy 和pandas 以及指定的chucksize 将巨大的pandas数据帧插入sqlite时,会出现内存错误。

起初我以为这是一个问题,to_sql但是我尝试了一种解决方法,而不是使用我使用的块大小for i in range(100): df.iloc[i * 100000:(i+1):100000].to_sql(...),这仍然导致错误。

似乎在某些情况下,通过sqlalchemy重复插入sqlite会导致内存泄漏。

通过一个最小的示例,我很难尝试复制在转换数据时发生的内存泄漏。但这非常接近。

import string
import numpy as np
import pandas as pd
from random import randint
import random

def make_random_str_array(size=10, num_rows=100, chars=string.ascii_uppercase + string.digits):
    return (np.random.choice(list(chars), num_rows*size)
            .view('|U{}'.format(size)))

def alt(size, num_rows):
    data = make_random_str_array(size, num_rows=2*num_rows).reshape(-1, 2)
    dfAll = pd.DataFrame(data)
    return dfAll

dfAll = alt(randint(1000, 2000), 10000)

for i in range(330):
    print('step ', i)
    data = alt(randint(1000, 2000), 10000)
    df = pd.DataFrame(data)
    dfAll = …
Run Code Online (Sandbox Code Playgroud)

python sqlite memory-leaks sqlalchemy pandas

4
推荐指数
1
解决办法
439
查看次数