测量python多处理中的浪费时间

测量python多处理中的浪费时间,python,concurrency,parallel-processing,multiprocessing,metrics,Python,Concurrency,Parallel Processing,Multiprocessing,Metrics,有没有办法衡量多处理.Pool的每个子进程等待输入的时间与处理数据的时间 让我们以这个并行处理文件行的简单示例为例: from multiprocessing import Pool pool = Pool(processes=16) with open('a_large_file.txt', 'r') as f: for foo in pool.imap_unordered(a_slow_function, f, chunksize=100) do_something_

有没有办法衡量
多处理.Pool
的每个子进程等待输入的时间与处理数据的时间

让我们以这个并行处理文件行的简单示例为例:

from multiprocessing import Pool
pool = Pool(processes=16)
with open('a_large_file.txt', 'r') as f:
    for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)
        do_something_with(foo)
根据
slow\u函数所需的时间、我们从
f
读取数据的速度以及数据块大小,我的子流程可能会在等待数据时转动拇指。我能测量这个吗

到目前为止,我最好的猜测是将
cProfile.runctx
包装成
slow\u函数
。这将为每个工作者生成一个概要文件,然后我可以将其与脚本的总运行时间进行比较。然而,
do\u something\u与(foo)
可以扭曲结果,所以我必须考虑到这一点。有没有更干净的方法


注意:我不介意解决方案是否涉及linux特定的工具。

您可以尝试
line\u profiler
,这是一个行分析器,用于获取

for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)
行和
a_slow_函数中的总和时间
,然后比较这两个数字

我不确定这是否是一个好主意,但这仍然是一个好主意


您也可以单独尝试计时,例如查看读取文件中的行的速度:

例如

for line in f: pass