Python posix.waitpid上的进程间通信被阻止
我有一个python代码,它在使用cProfile进行评测时总是提供以下数据Python posix.waitpid上的进程间通信被阻止,python,multithreading,performance,deadlock,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 {pos
`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()
这在本文中得到了很好的解释
executeCommand方法是从代码中的许多地方调用的
在另一个地方,它迭代URL列表并执行curl命令。这可能是非常糟糕的性能瓶颈,因为这将阻碍整个子流程的完成
我的问题是,尽管在代码中多次调用了executeCommand
函数,但为什么cProfile输出在nCalls列中只显示2
如果罪魁祸首是我怀疑的,是否有解决此问题的方法。我至少看到两个问题:1。对于
posix.waitpid()
和2,为什么ncalls
是2
。如何提高从多个外部命令(URL)收集输出的代码的性能。这是,这是。更多例子:,或。这是否意味着在python.no中任何时候都只能运行两个连续的批处理过程。要回答第一个问题,。请回答您的问题:“我的问题是,尽管多次调用executeCommand函数,但为什么cProfile输出在nCalls列中仅显示2”提供一个完整的最小代码示例来演示这个问题:我应该能够运行python-mcProfile your_script.py
,并查看posix.waitpid
的ncalls equals2
,而your_script.py
运行executeCommand()
两次以上。