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

时间:2013-09-20 15:58:40

标签: python concurrency parallel-processing multiprocessing metrics

有没有办法衡量multiprocessing.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)

根据a_slow_function花费的时间,我们从f读取的速度以及块大小,我的子流程可能会在等待数据时最终摆弄他们的拇指。我可以测量一下吗?

到目前为止,我最好的猜测是将cProfile.runctx包裹在a_slow_function附近。这会为每个worker生成一个配置文件,然后我可以将其与脚本的总运行时间进行比较。但是,do_something_with(foo)可能会导致结果偏差,因此我必须考虑到这一点。有更清洁的方法吗?

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

1 个答案:

答案 0 :(得分:1)

您可以尝试使用线路探查器line_profiler来获取

的时间
for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)

行和a_slow_function内的总和时间,然后比较那些两个数字。

我不确定这是否是的想法,但这仍是一个想法。


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

例如

for line in f: pass