Python 类型标记(Type Hints) 初探
缘起
Python是一门动态强类型语言, 动态性是它鲜明的特点.
但是动态性在给程序员充分的自由的同时, 也带来了一些不好的负面效应. 特别是在团队协作的时候, 不好的队友会引发许多难以定位的问题.
同时动态性也大大削弱了ide的作用, 代码提示, 重构等一些功能远不如静态语言来得可靠.
1 | class Person: |
比如这个代码片段, ide很难准确识别introduce_someone的参数应该是Person类的实例, 它只能单纯地从文本上分析, 并把所有可能的单词都提示出来.
而且当调用introduce_someone, 传入了不合适的对象, 也很难通过静态检查发现.
类型标记的出现就解决了这些问题.
OpenBLAS blas_thread_init pthread_creat Resource temporarily unavailable 问题分析与解决
症状
最近在在一台服务器上发现, 一个服务的工作进程会异常退出, 但部署有相同代码的其他服务却没有类似的情况.
查看日志发现以下错误
1 | Traceback (most recent call last): |
分析
Resouce limit
在上面的错误输出里有一个关键词 RLIMIT_NPROC, 涉及到了linux的Resouce limit.
在Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值,虚拟内存的最大值等。
Lightgbm多线程卡死问题定位
症状
最近在开发的lightgbm树模型,发现服务在处理了一定量请求后会卡死,请求无响应。
pstack之后发现, 进程卡在libgomp.so这个动态库的函数中. 证实确实是卡死
1 | Thread 8 (Thread 0x7f8eb7900700 (LWP 1859)): |
尝试
首先尝试google lightgbm hang, 看了前几条记录.
发现,github上的一个issue, 顺着发现官网文档上早就记录里这个问题, 并且提供了解决办法.
《通往奴役之路》读书笔记
《冬吴相对论》读书笔记
《道德箴言录》读书笔记
Python2 中 旧式类与property引发的bug
《我们台湾这些年》读书笔记
《国史大纲》读书笔记
C扩展与gevent共存时的问题
gevent是一个使用完全同步编程模型的可扩展的异步I/O框架。
通用monkey.patch_all() 所有io操作函数, gevent可以以同步的方式编写异步代码. 在不更改代码的同时就可以使系统并发性能得到指数级提升。
这里有一个局限, c扩展中的io操作无法被patch, 会导致整个server阻塞
《浮生六记》笔记

浮生六记算是沈复的自传吧,其人才情虽好,德行却是没什么称道的地方。当然他前半生神仙眷侣般的生活,也不知惹多少人羡慕,红袖添香夜读书大概就是如此吧。
名为六记,只余其四,也是人生一大憾事
笔记
卷一 闺房记乐
其形削肩长项,瘦不露骨,眉弯目秀,顾盼神飞,唯两齿微露,似非佳相。
阮云:一会儿就该说真香了
余镌“愿生生世世为夫妇”图章二方,余执朱文,芸执白文,以为往来书信之用。
阮云:此生能得一良侣已是奢望,又怎么敢求生生世世。
山果收获,必借猴力,果然。
余调其言,如蟋蟀之用纤草,渐能发议。其每日饭必用茶泡,喜食芥卤乳腐,吴俗呼为臭乳腐,又喜食虾卤瓜。
阮云:喜欢饭后喝茶,腌制食品,早夭有因
情之所钟,虽丑不嫌。
其癖好与余同,且能察眼意,懂眉语,一举一动,示之以色,无不头头是道。
于是相挽登舟,返棹至万年桥下,阳乌犹未落山。舟窗尽落,清风徐来,绒扇罗衫,剖瓜解暑。




