尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python惰性计算教程_延迟执行优化性能

Python惰性计算教程_延迟执行优化性能 中惰性计算并非原生强制特性, 不过它能够借助生成器、以及dask等手段主动达成延迟执行, 以此来减少内存占用并且避免提前进行计算。在其中, 惰性计算也就是Lazy, 它并非是语言原生所强制具备的特性, 不过呢, 借助生成器, 还有迭代器, 以及延迟属性, 这里的延迟属性是通过加上缓存来实现的, 另外还有第三方库, 比如说dask或者lazy--proxy, 你能够以主动的方式去实现延迟执行, 如此一来, 便可以显著地减少内存占用, 同时还能缩减提前计算所产生的开销。用生成器替代列表最常用也最有效的惰性方式在你处于那种需要对大量数据进行遍历, 而又不要求一次性把全部数据都加载到内存之时, 生成器会是首选之物。它是那种仅仅在每次执行next()操作或者进入for循环之际, 才会依据需求产出一个值的东西。例如读取大文件逐行处理# 一次性读入全部行内存爆炸风险 lines open(huge.log).readlines() # 全部加载到内存 for line in lines: if ERROR in line: process(line)惰性读取内存恒定def read_log_lazy(filename): with open(filename) as f: for line in f: # 文件对象本身就是迭代器 yield line.strip()for line in read_log_lazy(huge.log): if ERROR in line: process(line)用 .chain 和 实现惰性组合操作绝大多数函数返回的是迭代器而不是列表, 其天然支持链式惰性计算, 这类函数并不会立刻执行, 只有在最终消费的时候才会触发。示例从两个大列表中找前 5 个偶数不构建中间列表from itertools import chain, islice, filterfalsea range(1000000) b range(2000000, 3000000)惰性拼接 惰性过滤 惰性截断evens filter(lambda x: x % 2 0, chain(a, b)) first_5_evens list(islice(evens, 5)) # 此刻才真正执行用 或自定义 实现惰性属性针对于那些开销较大, 同时访问频次较低, 并且结果不会发生变化的属性而言, 要防止每次进行访问的时候都再次去计算。3.8 以上版本的 属于标准的解决办法旧版本的话能够使用描述符或者手动进行缓存。度加AI那有着度加AI官网入口的地方, 是百度官方的AIGC创作平台, 它具备支持AI成片的能力, 它还拥有AI生文的能力, 它有着数字人相关能力, 它持有声音克隆方面的能力, 它具备配音字幕的能力, 它拥有智能剪辑等在线创作能力。下载示例from functools import cached_propertyclass DataProcessor: definit(self, path): self.path pathcached_property def parsed_data(self): print(Parsing file... (runs once)) return [int(x) for x in open(self.path).read().split()]proc等于(data.txt), 打印(proc.), 这会触发解析, 打印(proc.), 此时会直接返回缓存, 没有输出。用 dask 做大规模惰性计算图适合数值/表格场景随着 NumPy / 操作着手去占据所有内存之进程展开时段, 呈现出了能够给予与之相互兼容的惰性接口的 dask , 促使它将执行计算这一行径架构在任务形成之图表框架内, 直至在调用 .() 之际才全面切实进入真正执行的状态。示例import dask.dataframe as dd不加载数据只构建计算图df dd.read_csv(big_file.csv) filtered df[df[value] 100] result filtered.groupby(category).mean().compute() # 此刻才运行那些并非能解决所有棘手难题的所谓惰性计算, 它会使得逻辑朝着更清晰的方向发展, 让内存变得更友好些然而它也有着可能将某些情况掩盖起来这种状况, 就好像重复去触发同一个呈现惰性状态的对象那般, 重点就在依据相应场景来进行选择, 针对小规模要用生成器, 针对属性缓存要使用, 针对特定情况要用dask, 在进行书写的时候要多去问上这么一句, 那便是“我现在实实在在地是真的非要这个值吗? ”。免费学习笔记深入立即使用在学习笔记中你将探索 的核心概念和高级技巧
返回列表