为什么我们公司还在用 Python 开发项目?
哎我跟你说…我这两天连续加了俩晚班,人都有点迷糊了,但你问为啥我们公司现在还死磕 Python,我刚好昨天晚上十一点多在楼下抽烟跟我们组那个小李还吐槽过这事,就顺嘴跟你叨叨两句哈…别期待我说得特别整齐,我现在脑子跟 Redis 里的 key 一样乱七八糟的。
嗯…主要还是“快”,真的是快
我们公司那个业务你知道吧,需求变来变去的,像我前天晚上刚改完一个接口,产品今天又说要把返回结构再调一遍,我当时真的…算了不说了。
Python 这种动态语言就是改起来真省事,有时候只是换个字段啥的,我本地随便改两行:
defbuild_response(user):
return {
"id": user.id,
"name": user.name,
"tags": user.tags or [], # 昨晚才加的字段…
}
你看,就是这种几分钟能搞定的东西,用 Java 写可能得改 Bean、改序列化、改校验、再跑一堆编译。
我们公司需求节奏快得要命,Python 这种“写了就跑”的节奏真的特别适合。
还有就是生态太舒服了…不是我吹
前几天我们要做个小的数据分析,看下某个活动的转化率,我们组那个实习生直接在座位上敲了几行 pandas:
import pandas as pddf = pd.read_csv("order.csv")
print(df.groupby("user_id")["amount"].sum())
不到五分钟就给业务那边结果了。
真的方便得离谱,我当时还在旁边开玩笑说:“你这效率要是搁 Java,估计文件还没读完。”
工程化确实不如 Java,但我们用法子补了
你知道 Python 最大的槽点就是工程化和类型安全嘛,我们组去年因为一个“None 调用属性”的 bug 搞得线上报警响了半夜。
后来我们就都统一用了 mypy 做类型检查,CI 强制扫一遍:
defget_age(u: dict) -> int:
return int(u.get("age", 0))
虽然还是动态语言,但真的少踩很多坑。小李上次改代码没写类型,被 pipeline 卡住,骂骂咧咧但还是乖乖改了。
运维成本…说实话也不高
我们公司主要服务都跑容器里,Python 的性能虽然没法和 Go、Java 比,但我们压根没到那种量级。
上个月我们一个 Python 服务 QPS 干到了 2000+,CPU 才飘了 40% 左右,我们老板还在那念叨啥“性能不行就多加几台”…我心想便宜机器随便加呗,反正预算又不是我批。
对了,还有一个特别现实的原因:写 Python 的便宜
不是我黑同行啊,就我们面试的时候,Python 工程师是真的好招,而且新人上手快得要死。
我那天还跟隔壁组的胖哥说:“为啥选 Python?当然是因为新人三天就能干活,Java 新人三天刚搞懂 Maven。”
我们确实有几个高性能场景用 Go 写的,也有一些老模块还是 Java,但大部分日常业务、脚本、自动化工具、内部系统,Python 就够了。
你看代码这么简短:
from fastapi import FastAPIapp = FastAPI()
@app.get("/ping")
defping():
return {"msg": "pong"}
我第一次用 FastAPI 的时候都惊了,这也太丝滑了吧。
行了我这边又要去开会了…刚才本来想讲一个我们以前把 Python 服务写挂的故事,结果说着说着忘了…算了等我晚上有空再跟你吐槽。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB。