python可以用del释放资源_如何销毁Python对象并释放内存

现在,可能是5万里的某个东西非常大,这导致了OOM,所以为了测试这个,我首先尝试:file_list_chunks = list(divide_chunks(file_list_1,20000))[30000:]

如果它在10000失败,这将确认20k是否太大的chunksize,或者如果它再次在50000失败,代码有问题。。。在

好吧,注意密码。。。在

首先,您不需要显式的list构造函数,在python中,迭代比将整个列表生成内存要好得多。在

^{pr2}$

我想你可能在这里误用了线程池:Prevents any more tasks from being submitted to the pool. Once all the tasks have been completed the worker processes will exit.

这看起来像close可能有一些想法仍在运行,但我想这是安全的,感觉有点不正常,最好使用线程池的上下文管理器:with ThreadPool(64) as pool:

results = pool.map(get_image_features,f)

# etc.

python中显式的dels。在

您应该在join/with之后收集with ThreadPool(..):

...

pool.join()

gc.collect()

你也可以试着把它分成小块,比如10000块甚至更小!在

液压锤1

有一件事,我会考虑在这里做,而不是使用pandas数据帧和大列表,而是使用SQL数据库,您可以在本地使用sqlite3:import sqlite3

conn = sqlite3.connect(':memory:', check_same_thread=False) # or, use a file e.g. 'image-features.db'

并使用上下文管理器:with conn:

conn.execute('''CREATE TABLE images

(filename text, features text)''')

with conn:

# Insert a row of data

conn.execute("INSERT INTO images VALUES ('my-image.png','feature1,feature2')")

这样,我们就不必处理大型列表对象或数据帧。在

你可以把连接传递到每个线程。。。你可能会有点奇怪,比如:results = pool.map(get_image_features, zip(itertools.repeat(conn), f))

然后,在计算完成后,您可以从数据库中选择所有内容,并将其转换为您喜欢的任何格式。E、 g.使用read_sql。在

液压锤2

在这里使用一个子进程,而不是在同一个python实例中“shell out”运行到另一个实例中。在

因为可以将start和end作为系统参数,您可以将这些切片:# main.py

# a for loop to iterate over this

subprocess.check_call(["python", "chunk.py", "0", "20000"])

# chunk.py a b

for count,f in enumerate(file_list_chunks):

if count < int(sys.argv[1]) or count > int(sys.argv[2]):

pass

# do stuff

这样,子进程将正确地清理python(不可能存在内存泄漏,因为进程将被终止)。在

我敢打赌Hammer 1是最好的选择,它让人感觉像是把大量的数据粘在一起,不必要地把它读入python列表中,而使用sqlite3(或其他一些数据库)完全避免了这一点。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值