05-Python 杂项
Python 相关
平常工作中用什么工具进行静态代码分析
点评:静态代码分析工具可以从代码中提炼出各种静态属性,这使得开发者可以对代码的复杂性、可维护性和可读性有更好的了解,这里所说的静态属性包括:
- 代码是否符合编码规范,例如:PEP-8。
- 代码中潜在的问题,包括:语法错误、缩进问题、导入缺失、变量覆盖等。
- 代码中的坏味道。
- 代码的复杂度。
- 代码的逻辑问题。
工作中静态代码分析主要用到的是 Pylint 和 Flake8。
- Pylint:可以检查出代码错误、坏味道、不规范的代码等问题,较新的版本中还提供了代码复杂度统计数据,可以生成检查报告。
- Flake8:封装了Pyflakes(检查代码逻辑错误)、McCabe(检查代码复杂性)和 Pycodestyle(检查代码是否符合PEP-8规范)工具,它可以执行这三个工具提供的检查。
- PyChecker:Python 代码分析工具
- Pep8:静态检查 PEP8 编码风格的工具。
如何剖析 Python 代码的执行性能
剖析代码性能可以使用 Python 标准库中的 cProfile
和 pstats
模块,cProfile
的 run
函数可以执行代码并收集统计信息,创建出 Stats
对象并打印简单的剖析报告。Stats
是 pstats
模块中的类,它是一个统计对象。
当然,也可以使用三方工具 line_profiler
和 memory_profiler
来剖析每一行代码耗费的时间和内存,这两个三方工具都会用非常友好的方式输出剖析结构。
如果使用 PyCharm,可以利用“Run”菜单的“Profile”菜单项对代码进行性能分析,PyCharm 中可以用表格或者调用图(Call Graph)的方式来显示性能剖析的结果。
下面是使用 cProfile
剖析代码性能的例子。
1 |
|
如果使用line_profiler
三方工具,可以直接剖析is_prime
函数每行代码的性能,需要给is_prime
函数添加一个profiler
装饰器,代码如下所示。
1 |
|
安装line_profiler
。
1 |
|
使用line_profiler
。
1 |
|
运行结果如下所示。
1 |
|
简述 vitualenv 及应用场景
vitualenv 是一个独立的 Python 虚拟环境。
当前项目依赖的是一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而 virtualenv 就是解决这种情况的,virtualenv 通过创建一个虚拟化的 Python 运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰。
简述 pipreqs 及应用场景
pipreqs 可以通过对项目目录扫描,自动发现使用了那些类库,并且自动生成依赖清单。
1 |
|
supervisor 的作用
Supervisor:是一款基于 Python 的进程管理工具,可以很方便的管理服务器上部署的应用程序。是 C/S 模型的程序,其服务端是 supervisord 服务,客户端是 supervisorctl 命令
主要功能:
- 启动、重启、关闭包括但不限于 Python 进程。
- 查看进程的运行状态。
- 批量维护多个进程。
内存泄露场景 ★★★★★
- 循环引用
- 打开文件未正确关闭
- 使用外部资源时没有显示释放
- 一些机器学习、人工智能的库容易发生内存泄露
- 使用装饰器也会造成内存泄露
- 如果在Python中使用C扩展,需要确保在对应的资源不再需要时,手动释放资源。
开发相关
简述 jenkins 工具的作用
Jenkins:是一个可扩展的持续集成引擎。主要用于:
- 持续、自动地构建/测试软件项目。
- 监控一些定时执行的任务。
简述 saltstack、ansible、fabric、puppet 工具的作用?
待补充…