Skip to main content
 首页 » 编程设计

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

2025年05月04日12txw1958

有没有办法衡量 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 读取的速度以及 block 大小,我的子进程可能会在等待数据时无所事事。我可以测量这个吗?

到目前为止,我最好的猜测是将 cProfile.runctx 包裹在 a_slow_function 周围。这会为每个工作人员生成一个配置文件,然后我可以将其与脚本的总运行时间进行比较。但是,do_something_with(foo) 可能会扭曲结果,所以我必须考虑到这一点。有没有更简洁的方法来做到这一点?

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

请您参考如下方法:

你可以试试 line_profiler,一个线路分析器,来获取时间

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

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

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


你也可以尝试单独计时,比如看看你能多快阅读文件中的行:

例如。

for line in f: pass