今天在使用berkeley db,性能居然很弱,每秒才插入几千次,一般情况下都有5W以上的插入性能的
profile 之后,发现瓶颈居然在一行if上
if find(dbname):
append db
find在找不到的情况下,不return,也就是return None
这行居然占掉了90%以上的CPU时间,这才意识到,if None需要进行 bool(None) 的运算。可能这就是原因。
马上写成
if find(dbname) is None:
append db
速度马上上来了,每秒插入5W多次
在很多 python 项目中,返回 None 而不返回 False 已经是一种风格
可是在写判断的时候,还是习惯直接 if,而不是if xxx not None
如果需要大量的判断,例如密集型的数据库操作,还是要小心这个陷阱
profile 之后,发现瓶颈居然在一行if上
if find(dbname):
append db
find在找不到的情况下,不return,也就是return None
这行居然占掉了90%以上的CPU时间,这才意识到,if None需要进行 bool(None) 的运算。可能这就是原因。
马上写成
if find(dbname) is None:
append db
速度马上上来了,每秒插入5W多次
在很多 python 项目中,返回 None 而不返回 False 已经是一种风格
可是在写判断的时候,还是习惯直接 if,而不是if xxx not None
如果需要大量的判断,例如密集型的数据库操作,还是要小心这个陷阱