Python 对象的背包与紧身衣:从 __dict__ 到 __slots__
凌晨两点,你写了两个小时的数据处理脚本,终于把一百万个用户对象加载进内存,准备跑分析。结果还没到第一个循环,内存就飙到 4GB,进程被系统 OOM 杀掉了。 更气人的是,对象本身就两个字段——user_id 和 timestamp。两个 int,一百万次,怎么算也就几十 MB。剩下的内存去哪了? 把锅甩给”Python 慢”之前,先问一个更具体的问题:一个 Python 实例,到底把它的...
凌晨两点,你写了两个小时的数据处理脚本,终于把一百万个用户对象加载进内存,准备跑分析。结果还没到第一个循环,内存就飙到 4GB,进程被系统 OOM 杀掉了。 更气人的是,对象本身就两个字段——user_id 和 timestamp。两个 int,一百万次,怎么算也就几十 MB。剩下的内存去哪了? 把锅甩给”Python 慢”之前,先问一个更具体的问题:一个 Python 实例,到底把它的...
先做一个实验。下面两行代码,第一行天衣无缝,第二行当场报错: >>> nums = [1, 2, 3] >>> next(nums) TypeError: 'list' object is not an iterator 奇怪的地方在于:for x in nums 明明跑得好好的,nums 显然”可以被遍历”,为什么却不能对它 next()?很多人在...
先看一段再普通不过的代码: def countdown(n): print(f"从 {n} 开始倒计时") while n > 0: yield n n -= 1 c = countdown(3) print("函数已经'调用'完了,但你看到上面那行 print 了吗?") print(next(c)) 猜一下输出顺序。很多人第一...
python中的函数。 函数 函数是带名字的代码块,方便代码复用,减少重复代码,方便代码修改和维护。 不带参数的函数 函数由def关键字定义,函数名后的括号内指定形参,形参可以为空。 函数定义中指定的参数称为形参,函数调用时指定的参数称为实参。 def greet(): """不带参数的函数""" print("Hello!") greet(...
glog是google的一个日志库,用cpp编写,接口也是cpp的。 遇到的问题 glog写日志文件时,有缓存机制。 一条日志最多会缓存Flags_logbufsecs秒,默认是30秒。 小于等于Flags_logbuflevel级别的日志会缓存,否则不会缓存。 google::FlushLogFiles这个接口可以触发立即将缓存的日志写文件。
记录环境安装过程。 使用ssh协议连接github 使用ssh协议连接github,除了安全性之外有个额外的好处:不需要为每次连接提供用户名和密码。 检查是否已经存在SSH密钥 执行以下命令,观察~/.ssh目录下是否已经存在ssh密钥。 ls -al ~/.ssh 生成新的ssh密钥并添加到ssh-agent中 如果你还没有ssh密钥,那么需要创建新的ssh密钥。 如果...
记录一些有用的网站。 Linux公社 官网 下载资源 MSDN,我告诉你 官网 该网站包含很多windows系统上的安装包资源,比如:windows系统安装包,office,visual studio等。
记录一些vim使用中遇到的问题。 vim配置文件 在vim里运行:version,能够看到vimrc的位置。 例如,在Ubuntu 17.04的vim中:version执行结果中有如下几句: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 第二用户 vimrc 文件: "~/.vim/vimrc"...
git是目前世界上最先进的分布式版本控制系统。 本文记录git相关知识点,及使用git过程中遇到的问题。 参考书目 Pro Git(中文版) 内功(基础) 关于版本控制 本地版本控制系统(例如:rcs) 集中化的版本控制系统(例如:svn) 分布式版本控制系统(例如:git) git的最初目标 速度 简单的设计 对非线性开发模式的强力支持...