我在从文件中读取图表时遇到了类似的问题 . 处理包括计算不适合存储器的200 000x200 000浮点矩阵(一次一行) . 试使用 gc.collect() 释放计算之间的内存来修复问题的内存相关方面但是它导致性能问题:我不知道为什么但是即使使用的内存量保持不变,每次调用 gc.collect() 的时间也要花费更多时间比前一个 . 很快,垃圾收集占用了大部分的计算时间 .

为了解决内存和性能问题,我转而使用多线程技巧,我曾在某处读过(对不起,我再也找不到相关的帖子) . 在我在一个大的 for 循环中读取文件的每一行之前,处理它,并且每隔一段时间运行 gc.collect() 以释放内存空间 . 现在我调用一个函数来读取和处理新线程中的文件块 . 一旦线程结束,内存将自动释放,而不会出现奇怪的性能问题 .

实际上它的工作原理如下:

from dask import delayed # this module wraps the multithreading

def f(storage, index, chunk_size): # the processing function

# read the chunk of size chunk_size starting at index in the file

# process it using data in storage if needed

# append data needed for further computations to storage

return storage

partial_result = delayed([]) # put into the delayed() the constructor for your data structure

# I personally use "delayed(nx.Graph())" since I am creating a networkx Graph

chunk_size = 100 # ideally you want this as big as possible while still enabling the computations to fit in memory

for index in range(0, len(file), chunk_size):

# we indicates to dask that we will want to apply f to the parameters partial_result, index, chunk_size

partial_result = delayed(f)(partial_result, index, chunk_size)

# no computations are done yet !

# dask will spawn a thread to run f(partial_result, index, chunk_size) once we call partial_result.compute()

# passing the previous "partial_result" variable in the parameters assures a chunk will only be processed after the previous one is done

# it also allows you to use the results of the processing of the previous chunks in the file if needed

# this launches all the computations

result = partial_result.compute()

# one thread is spawned for each "delayed" one at a time to compute its result

# dask then closes the tread, which solves the memory freeing issue

# the strange performance issue with gc.collect() is also avoided

python循环中释放内存的方法_我怎样才能在Python中明确释放内存?相关推荐

  1. python中浮点数的表示方法_很好地在python中表示浮点数

    我想将浮点数表示为四舍五入到一定位数的字符串,并且从不使用指数格式. 本质上,我想显示任何浮点数并确保它看起来不错. 这个问题有几个部分: 我需要能够指定 有效位数. 有效位数 需要是可变的,不能是 ...

  2. python 类调用不存在的方法_[python] 类常用的内置方法

    内置方法 说明 __init__(self,...) 初始化对象,在创建新对象时调用 __del__(self) 释放对象,在对象被删除之前调用 __new__(cls,*args,**kwd) 实例 ...

  3. python __repr__方法_第8.13节 Python类中内置方法__repr__详解

    当我们在交互环境下输入对象时会直接显示对象的信息,交互环境下输入print(对象)或代码中print(对象)也会输出对象的信息,这些输出信息与两个内置方法:__str__方法和__repr__方法有关 ...

  4. java中i+=2什么意思_三分钟看懂Java中i++与++i的性能差别以及循环中如何使用

    在Java中,自增是一种非常常见的操作,在自增中,有两种写法,一种是前缀自增(++i),一种是后缀自增(i++).这里主要简单介绍两种自增的差别. 一.含义差别 前缀自增和后缀自增是不同的.前缀自增( ...

  5. python 如何判断一个函数执行完成_三步搞定 Python 中的文件操作

    当程序运行时,变量是保存数据的好方法,但变量.序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中. Python 提供了内置的文件对象,以及 ...

  6. python __reduce__魔法方法_非常全的通俗易懂 Python 魔法方法指南(下)

    点击上方"咸鱼学Python",选择"加为星标" 第一时间关注Python技术干货! 作者:Rafe Kettler 翻译:hit9 来源:https://py ...

  7. python counter 出现次数最少的元素_[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法...

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  8. python中如何实现复制粘贴_复制粘贴功能的Python程序 python 中如何实现

    python 中如何实现对文件的复制.粘贴虽然小编心有不甘,可是小编也明白,这辈子就只能陪你到这了. 比如说:小编想将"c:\123\1.txt"复制到"d:\新建文件夹 ...

  9. 停止使用 Python 循环,这三种方法效果更棒

    我们知道在 Python 中使用循环速度是很慢,如果你正在处理类似的情况,那该怎么办呢? 在本文中,我将给大家分享可用于替代 Python 循环的方法和案例,喜欢记得收藏.点赞.关注. 更多技术交流, ...

  10. python split()方法_秘籍:10个Python字符串处理技巧(附代码)

    作者:马修·梅奥 翻译:陈之炎 校对:和中华 本文约1600字,建议阅读7分钟. 本文为你介绍利用Python处理字符串的一些基本操作. 在探寻文本分析途径时却不知从何下手,该怎么办?那么可以通过这个 ...

最新文章

  1. 安装rebar时提示Uncaught error in rebar_core
  2. 图形系统中的仿射变换
  3. url 特殊字符 传递参数解决方法
  4. 使用HTML5实现刮刮卡效果
  5. 0到100速度测试软件,【图】到底如何完成 揭晓0-100公里/小时测试_汽车江湖
  6. Python基础(三)文件操作和处理json
  7. bootstrap插件(对话框)bootbox参数和自定义弹出框宽度设置
  8. 敏捷开发框架_RingCentral Tech丨LeSS- 大规模敏捷开发框架实践心路
  9. html 怎么调用js中函数返回值,JavaScript 函数
  10. 阿里巴巴 JAVA 开发手册
  11. kindle刷机ttl_[原创]只需USB线对Kindle 3修砖的小白教程
  12. 戴尔t30服务器装系统6,手把手为你演示win7系统戴尔t30装win7的具体办法
  13. 概率分布函数--二项分布poisson分布
  14. 一看就懂的保姆级教程:open vn设置 (亲测通过)
  15. 2020年中国云原生用户调研的十二个要点
  16. 基本函数依赖和候选键_[总结]关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式、……)...
  17. 局域网,广域网,城域网
  18. VisualVm的理解
  19. Linux可重入函数
  20. Unity初级案例-愤怒的小鸟:三:07猪的受伤+08弹弓划线操作+09死亡和加分特效的制作+10游戏逻辑的判定,实现多只小鸟的飞出

热门文章

  1. 真牛皮!wsl安装位置
  2. android缓存清理代码,安卓缓存清除和计算
  3. SS00011.elasticsearch——|HadoopElasticSearch集中式日志分析系统.v11|——|Elasticsearch.v11|
  4. qiankun加载react子应用报错[import-html-entry]: error occurs while executing normal script
  5. Epoch Based Reclamation 的个人理解
  6. vue-cli脚手架和npm init vue@latest 区别
  7. Chrome浏览器断网时的小恐龙dino怎么一直玩?
  8. 联想笔记本重装windows10系统
  9. apple 证书 账号 内购 详解
  10. 要装系统就装WINDOWSXPSP3VL正式版操作系统