繁体   English   中英

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

[英]Measuring wasted time in python multiprocessing

有没有一种方法可以衡量一个multiprocessing.Pool过程的每个子进程多少时间, 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读取数据的速度以及块的大小,我的子a_slow_function最终可能会在等待数据的同时摇动手指。 我可以测量吗?

我最好的猜测,到目前为止是包装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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM