0%

补录,笔记太过久远,原文已然忘记。《维摩诘经》有云,无尽灯者,譬如一灯燃百千灯,冥者皆明,明终不尽。所谓燃灯者,大抵如此

文革十年甚于崖山者百倍

视其平居无以异于俗人,临大节而不可夺,此不俗人也

人民,人民,有多少罪恶借你的名义施行

殷鉴不远,多行不义必自毙

简介

pytest是一个非常成熟的全功能的Python测试框架, 简单灵活, 容易上手, 具有很多第三方插件,并且可以自定义扩展.

安装

1
pip install pytest

使用

简单例子

先写个测试代码tmp.py

1
2
3
4
5
6
7
8
def add(a, b):
return a + b

def test_add():
assert add(1, 1) == 2

def test_add_fail():
assert add(1, 2) == 2

使用方法

1
usage: py.test [options] [file_or_dir] [file_or_dir] [...]

阅读全文 »

缘起

Python是一门动态强类型语言, 动态性是它鲜明的特点.

但是动态性在给程序员充分的自由的同时, 也带来了一些不好的负面效应. 特别是在团队协作的时候, 不好的队友会引发许多难以定位的问题.

同时动态性也大大削弱了ide的作用, 代码提示, 重构等一些功能远不如静态语言来得可靠.

1
2
3
4
5
6
7
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def introduce_someone(person):
print('{} is {} years old'.format(person.name, person.age))

比如这个代码片段, ide很难准确识别introduce_someone的参数应该是Person类的实例, 它只能单纯地从文本上分析, 并把所有可能的单词都提示出来.

而且当调用introduce_someone, 传入了不合适的对象, 也很难通过静态检查发现.

类型标记的出现就解决了这些问题.

阅读全文 »

缘起

golang将程序编译成一个可执行文件,部署起来特别方便。

那么Python是否也有类似解决方案呢?单一可执行文件,免去安装Python环境的麻烦,也避免了直接暴露源码程序。

经过多次搜索之后找到解决方案 exxo

注意:exxo只支持linux64平台

阅读全文 »

症状

最近在在一台服务器上发现, 一个服务的工作进程会异常退出, 但部署有相同代码的其他服务却没有类似的情况.

查看日志发现以下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Traceback (most recent call last):
...
File "/home/q/hawkeye_mid_dev/src/model/b_card_model.py", line 5, in <module>
import numpy as np
File "/home/sync360/miniconda3/envs/xd_mid/lib/python2.7/site-packages/numpy/__init__.py", line 142, in <module>
from . import add_newdocs
File "/home/sync360/miniconda3/envs/xd_mid/lib/python2.7/site-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/home/sync360/miniconda3/envs/xd_mid/lib/python2.7/site-packages/numpy/lib/__init__.py", line 8, in <module>
from .type_check import *
File "/home/sync360/miniconda3/envs/xd_mid/lib/python2.7/site-packages/numpy/lib/type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "/home/sync360/miniconda3/envs/xd_mid/lib/python2.7/site-packages/numpy/core/__init__.py", line 16, in <module>
from . import multiarray
KeyboardInterrupt
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1024 current, 516033 max

分析

Resouce limit

在上面的错误输出里有一个关键词 RLIMIT_NPROC, 涉及到了linux的Resouce limit.

在Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值,虚拟内存的最大值等。

阅读全文 »

症状

最近在开发的lightgbm树模型,发现服务在处理了一定量请求后会卡死,请求无响应。

pstack之后发现, 进程卡在libgomp.so这个动态库的函数中. 证实确实是卡死

1
2
3
Thread 8 (Thread 0x7f8eb7900700 (LWP 1859)):
#0 0x00007f8e9def4af1 in ?? () from /usr/lib64/libgomp.so.1
#1 0x00007f8e9def23a0 in ?? () from /usr/lib64/libgomp.so.1

尝试

首先尝试google lightgbm hang, 看了前几条记录.

发现,github上的一个issue, 顺着发现官网文档上早就记录里这个问题, 并且提供了解决办法.

阅读全文 »

本文为整理以前的读书笔记

概述

这本书应该是对三观冲击最大的一本,在大学时第一次读,先是震惊,再是愤怒,然后是害怕。

当然现在看来,又有一些不一样的见解。一直自认为,思维深刻,三观稳定,然而也不可避免地被各种书籍媒体塑造。

想要保持独立思考是何其之难,再者,就算能独立思考,人们接受的信息都是片面的,有怎能确保得出正确的结果呢?

阅读全文 »

本文为整理以前的读书笔记

简介

《冬吴相对论》是一档商业脱口秀广播节目,节目由原凤凰卫视著名主持人梁冬与《21世纪商业评论》发行人吴伯凡共同主持。

本书就是节目的内容集结而成,对于经济知识的扫盲有些意义,但也有电视节目的通病,知识流于细碎,没有体系。

初学者用来初步了解经济学现象,还是很有意义的。

阅读全文 »

本文为整理以前的读书笔记

简介

书如其名,是作者对与道德或者说真理的思索,内容多的短小的片段。

虽然连贯性略微缺失,但是思想的光芒无法掩盖,适合睡前阅读。

从文字间能看出,作者尚未能与道融而为一,尚未知行合一,故常有无力与痛苦之感,作者难道也是个悲观主义者吗?

阅读全文 »

本文为整理以前的读书笔记

简介

潜规则应该是对三观冲击最大的书之一,也是作者在读遍历史的总结。对于政权的更迭,剖析其原因,以及背后的潜规则。

此书可以和《血酬定律》搭配阅读,效果更佳。

阅读全文 »

缘起

话接上回,说是接手了一个82年的拉菲Python项目,这次又发现了一个新坑

项目中用了一个上下文类,用于存储本次请求的一些数据,在开发过程中我想把这个上下文类dump成json,详细分析里面的数据,然而发现上下文类的行为不符合预期

阅读全文 »

本文为整理以前的读书笔记

简介

历史到底是什么样子的?很难确定。

我们所经历的生活,在若干年后就会是历史,但是我现在仍看不清现实。想必后来人看现在也是一样的,仿佛笼罩在烟尘之中。

有的台湾人对大陆建国之后的历史有着错误的认识,视我们为洪水猛兽,但反过来,我们对他们的了解又有多少呢?

这本书就是以台湾历史亲历者的角度,诉说进几十年的历史,普通人眼中台湾的过往。

阅读全文 »

本文为整理以前的读书笔记

简介

国史大纲是钱穆先生大作,本是民国大学生的历史教科书。
所谓大纲者,不在完备,而是有提纲振领的作用。从中更是能体会到文化的精神,不是史料堆砌,不是无感情的上帝视角。

笔记

国家财赋偏向南方,向宋始

阮云:明朝时,科举分南北榜,南远胜北,自是有其缘由。

定州何明远资财巨万,家有绞机百张 — 太平广记

阮云:所谓资本主义萌芽

阅读全文 »

缘起

最近接手了一个82年的拉菲Python项目,简直酸爽。
Python版本用的是2.7.5,里面用的第三方库各种老旧,潜藏了不少深坑。这次我们就先讲enum库的坑,其他有空再聊。

enum是一个枚举类型的第三方库,在Python3.4以后就作为官方库存在了,使用参考
所以如果用新版本的Python就不会存在这个问题了,版本老旧害死人啊。

阅读全文 »

gevent是一个使用完全同步编程模型的可扩展的异步I/O框架。

通用monkey.patch_all() 所有io操作函数, gevent可以以同步的方式编写异步代码. 在不更改代码的同时就可以使系统并发性能得到指数级提升。

这里有一个局限, c扩展中的io操作无法被patch, 会导致整个server阻塞

阅读全文 »