我有一个python代码,在使用cProfile进行分析时总是会提供以下数据。
`299149 function calls (294133 primitive calls) in 39.049 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
2 36.532 18.266 36.532 18.266 {posix.waitpid}
39 1.769 0.045 1.769 0.045 {method 'query' of '_mysql.connection' objects}
1 0.120 0.120 0.167 0.167 connections.py:62(__init__)
2 0.083 0.042 0.083 0.042 {method 'rollback' of '_mysql.connection' objects}`
现在,我怀疑代码在posix.waitpid上阻塞的唯一方法是由于以下功能。
process = Popen(command, stdout=PIPE)
return process.communicate()
python subprocess communicate() block中解释了这一点。
方法executeCommand是从代码中的很多地方调用的。
并在另一个地方迭代URL列表并执行curl命令。这可能是非常糟糕的性能瓶颈,因为这将阻止整个子进程完成。
我的问题是为什么cProfile输出在nCalls列中只显示2,尽管在代码中多次调用executeCommand
函数。
如果罪魁祸首是我怀疑的,那么这个问题是否有解决办法。