进程间通信在posix.waitpid上被阻止

时间:2014-10-22 02:29:25

标签: python multithreading performance deadlock

我有一个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函数。

如果罪魁祸首是我怀疑的,那么这个问题是否有解决办法。

0 个答案:

没有答案