ano*_*ous 7 python profile trace visualization execution
我想在scrapy框架中跟踪功能/类执行命令。默认项目中有多个* .py文件,我想知道哪个py文件和类已按顺序执行。将记录器排在每个类和每个函数中听起来很愚蠢。如何可视化此顺序?
cprofile主要用于测量总时间。我还可以可视化一个模块内部的执行顺序,这是常见的问题,但是很难可视化多个模块。
在跟踪包方面,我没有找到适合大型项目(例如scrapy或django)的示例。跟踪用法教程仅涉及一个python文件。
我想在一个大型项目(例如scrapy)中的多个模块中跟踪多个* .py文件,而不是一个模块。
我知道像pdb这样的调试工具,但是我发现在整个项目中放置断点很麻烦。更重要的是,总结执行顺序并不容易。
最后,我通过使用Hunter进行了解决,它比内置跟踪模块更好。跟踪模块不提供include_dir属性。
对于那些对如何追踪所有刮板线条充满好奇的人。
$PYTHONHUNTER='Q(module_startswith=["scrapy", "your_project"])' scrapy list
Run Code Online (Sandbox Code Playgroud)
对于django,跟踪rest_framework的执行代码并将其保存到test.log,例如:
$PYTHONHUNTER='Q(module_startswith=["rest_framework", "your_project"]), action=CallPrinter(stream=open("test.log", "w"))' python manage.py runserver --noreload --nothreading
Run Code Online (Sandbox Code Playgroud)
min*_*ker 11
跟踪函数执行顺序的最佳工具绝对是viztracer。我不得不说,在理解大型项目时,可视化是一个重要因素。
与冷终端 ascii 相比,这样的交互式图像使您更容易理解程序中发生的情况。
此外,它是一个非侵入式工具,这意味着您不需要编写一行代码。只需安装它并用它运行您的程序即可。
pip install viztracer
viztracer your_script.py
Run Code Online (Sandbox Code Playgroud)
这里的另一个重要因素是 viztracer 支持多线程和多进程,并且可以在同一时间线上以单独的信号可视化它们,这是终端显示永远无法实现的。
该跟踪模块允许你跟踪一个程序运行时执行的程序执行,产生注释语句覆盖列表,打印主叫/被叫关系和列表功能。可以在其他程序中或从命令行中使用它。
python -m trace --count -C . somefile.py ...
Run Code Online (Sandbox Code Playgroud)
上面的代码将执行somefile.py并生成在执行过程中导入到当前目录的所有Python模块的带注释的清单。
pdb模块为Python程序定义了一个交互式源代码调试器。它支持在源代码行级别设置(条件)断点和单步执行,检查堆栈框架,源代码列表以及在任何堆栈框架的上下文中评估任意Python代码。它还支持事后调试,可以在程序控制下调用。
最常用的命令:
哪里)
下)
u(p)
您还可以检查此问题Python调试技巧
Coverage.py通常在测试执行期间测量代码覆盖率。它使用Python标准库中提供的代码分析工具和跟踪钩子来确定哪些行是可执行的,哪些行已执行。
Hunter是一种灵活的代码跟踪工具包,不是用于衡量覆盖率,而是用于调试,记录,检查和其他有害目的。
默认操作是仅打印正在执行的代码。例:
import hunter
hunter.trace(module='posixpath')
import os
os.path.join('a', 'b')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2869 次 |
| 最近记录: |