goagent 在 MAC 下 sslwrap 错误修复

goagent 升级到3.2.3后,总提示报错 'module' has no attribute 'sslwrap'。Google 后发现,OS X 10.10 把 Python 升级到了2.7.9,而该版本中移除了 sslwrap 方法,所以报错。因此该问题并非仅针对 Mac,只不过 Win 下 Python 升级不频繁,很少出现该问题。

解决方法为修改 /Library/Python/2.7/site-packages/gevent/ssl.py 文件,添加如下代码:

问题解决。还遇到过的其他问题:

  1. 执行sudo launchctl load /Library/LaunchDaemons/org.goagent.macos.plist没有效果,原因往往在于该配置文件内容有误。比如 Python 执行程序路径写错,修改后重新执行上述命令即可。

  2. 上述配置文件中python路径为/usr/bin/python,是系统自带python所在路径。而自己通过brew安装的python往往链接到/usr/local/b


阅读全文 »

豆瓣读书迁移工具 shaDou

shadou

一直想换个豆瓣帐号,毕竟玩这种网站,里面有熟人总是不方便…但读书、电影和音乐收藏信息的迁移比较麻烦。上百部图书电影,要是挨个点,既看着傻叉,又深感有辱程序员的荣耀。所以花半天写了这么个小玩意儿。

shaDou 取自 shadow 和 douban 的合体,研究一下午豆瓣 API 和 Python 客户端,发现文档各种不全,还要手动测试返回数据格式。加之电影和读书信息的 API 格式不同,暂时没有编写一个统一的客户端,只实现了读书信息迁移。

源码放在 GitHub:https://github.com/bt404/shaDou

有空了继续改进。


阅读全文 »

pymalloc — 从源码看 Python 对象分配器实现

Python 中一切皆对象,那么 Python 解释器(CPython)是如何管理这些内存中的对象呢?为了找到答案,自己下载了 Python 源码,参照源码注释学习了 pymalloc — Python object allocator 的实现。现在这里做个总结。

pymalloc 的实现位于 Python 源码主目录下的 Objects 目录中,文件名为 obmalloc.c。

背景

既然 CPython 的底层用 C 语言实现,那为何不直接使用标准库中的malloc/realloc/free等函数进行内存管理呢?这是因为,当 Python 应用频繁地创建和销毁一些小的对象,那么底层就要多次重复调用 malloc 和 free 等函数进行内存分配。这不仅会引入较大的系统开销,而且还可能产生大量的内存碎片。为了解决这个问题,Python 实现了一个类似内存池的机制—pymalloc 来满足较小对象(默认512KB以下)的内存请求。

Python 内存管理架构

简单地说,allocator 预先向系统申请一定数量的内存空间并格式化,每当有满足条件的内存请求时,allocato


阅读全文 »