陆陆续续在很多场景下使用过 Jupyter-Notebook,作为一个团队协同的交互式编程环境,在以下几类工具 / 脚本开发的场合下,Jupyter 很适合于作为开发的 Playground——
1. 执行网络请求相关任务
- 如对某些服务的原生 API 做批量查询 / 聚合查询等(裸接口包装)
- 配合数据加工、生成任务报表 / Issue / Task,或发送富文本邮件等
- 爬虫撰写
Modules: requests
, jinja2
2. 作为增强 Shell,进行系统管理
主要是受益于 Python 灵活的语言特性及核心库的丰富能力,如文件批处理(os
, glob
)、字符串处理(re
, 正则表达式)、JSON 序列化等等。
此外 Jupyter-Notebook 能很好归档一些短平快任务脚本,避免辛苦写完的代码沦为日后看不懂的一锤子买卖。需求描述 / 代码逻辑备注可以用 Markdown 灵活写在单独的 Cell 中,更为美观且便于维护。
一个 Notebook ( ipynb ) 可以通过命令行执行,因此也可以定义为定时任务 ( crontab ) ,跟执行脚本一样。
3. 数据分析及可视化处理
Python 有很多数据库模块,方便连接不同的数据源,并进行数据加工、生成表格 / 图表等等。(可参考很多数据工程师的工具箱)
Modules: numpy
, matplotlib
, pandas
, ipywidgets
4. Jupyter 拓展能力
Jupyter-Notebook 可以作为一个 REST Server 对外提供暴露自定义的 API Endpoint (不要尝试之,Python 世界轻量 WebServer 真的不少了),个人觉得唯一有用的场景是临时需要台 HTTPS Server 时(由于部署 Jupyter 时已经折腾过了 SSL 证书等)
Jupyter-Notebook 有很强的插件生态及多维度的拓展性,参考:
5. 总结
基于以上描述,什么场景非常适合部署一套 Jupyter?试举两例:
- 代码 & 文档 & 数据 混排及对外展示的一个知识库平台
- 无线测试 Console —— 比如在一台连接多部测试手机的服务器上部 Jupyter,做 adb log / dumpsys 文本解析等等