用exxo将Python程序编译成单一可执行文件
缘起
golang将程序编译成一个可执行文件,部署起来特别方便。
那么Python是否也有类似解决方案呢?单一可执行文件,免去安装Python环境的麻烦,也避免了直接暴露源码程序。
经过多次搜索之后找到解决方案 exxo
注意:exxo只支持linux64平台
最近在在一台服务器上发现, 一个服务的工作进程会异常退出, 但部署有相同代码的其他服务却没有类似的情况.
查看日志发现以下错误
1 | Traceback (most recent call last): |
在上面的错误输出里有一个关键词 RLIMIT_NPROC, 涉及到了linux的Resouce limit.
在Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值,虚拟内存的最大值等。
最近在开发的lightgbm树模型,发现服务在处理了一定量请求后会卡死,请求无响应。
pstack之后发现, 进程卡在libgomp.so这个动态库的函数中. 证实确实是卡死
1 | Thread 8 (Thread 0x7f8eb7900700 (LWP 1859)): |
首先尝试google lightgbm hang, 看了前几条记录.
发现,github上的一个issue, 顺着发现官网文档上早就记录里这个问题, 并且提供了解决办法.
gevent是一个使用完全同步编程模型的可扩展的异步I/O框架。
通用monkey.patch_all() 所有io操作函数, gevent可以以同步的方式编写异步代码. 在不更改代码的同时就可以使系统并发性能得到指数级提升。
这里有一个局限, c扩展中的io操作无法被patch, 会导致整个server阻塞

浮生六记算是沈复的自传吧,其人才情虽好,德行却是没什么称道的地方。当然他前半生神仙眷侣般的生活,也不知惹多少人羡慕,红袖添香夜读书大概就是如此吧。
名为六记,只余其四,也是人生一大憾事
其形削肩长项,瘦不露骨,眉弯目秀,顾盼神飞,唯两齿微露,似非佳相。
阮云:一会儿就该说真香了
余镌“愿生生世世为夫妇”图章二方,余执朱文,芸执白文,以为往来书信之用。
阮云:此生能得一良侣已是奢望,又怎么敢求生生世世。
山果收获,必借猴力,果然。
余调其言,如蟋蟀之用纤草,渐能发议。其每日饭必用茶泡,喜食芥卤乳腐,吴俗呼为臭乳腐,又喜食虾卤瓜。
阮云:喜欢饭后喝茶,腌制食品,早夭有因
情之所钟,虽丑不嫌。
其癖好与余同,且能察眼意,懂眉语,一举一动,示之以色,无不头头是道。
于是相挽登舟,返棹至万年桥下,阳乌犹未落山。舟窗尽落,清风徐来,绒扇罗衫,剖瓜解暑。
1 | import logging |
output
1 | warning division by zero |
logging.getLogger 获取一个记录器, 一般以模块名称命名SQLAlchemy core 是SQLAlchemy的核心部件,主要负责生成sql查询和具体的数据库操作,SQLAlchemy orm 就是构建在core之上的。
在不需要对象映射的时候,使用core而不是orm,可以降低数据库操作成本,提高性能。
1 | from sqlalchemy import create_engine |
1 | from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, Index |