我有一个观点,并且对于每个声明,我在其中放置time.time()
。例如:
t1 = time.time()
worker_stats = get_worker_stats(worker_id)
t2 = time.time()
在程序结束时,我会为每段代码提供结果。例如,对于上述内容:
WorkerStats = t2 - t1
这适用于短期解决方案,但对于生产,它会在整个代码中不断散布这些time.time()
语句。是否有更好的方法来跟踪语句性能,或者这是唯一的方法吗?
答案 0 :(得分:2)
使用计时器通常不是衡量性能的好方法。
为了提高计划效果,通常会使用profiler:
您可以将其命名为:
import cProfile
cProfile.run('get_worker_stats(worker_id)')
或者您可以决定删除代码中的所有计时器/个人资料语句,然后运行:
python -m cProfile program.py
在这种情况下,python
将运行附加了探查器的程序。
好消息是,探查器会跟踪源自顶级调用的所有方法调用,调用函数的次数,平均性能等。
通过调用顶部的探查器,您可以简单地省略中间的所有时间跟踪:只需删除顶部的跟踪声明。
此外,您可以配置配置文件以便将结果写入单独的文件,以便 - 如果您忘记删除分析器语句 - 您不必写入输出通道。
此talk at PyCon演示了如何分析获得的结果。