有没有办法衡量每个子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
. 这会为每个工作人员生成一个配置文件,然后我可以将其与脚本的总运行时间进行比较。但是,do_something_with(foo)
可能会扭曲结果,所以我必须考虑到这一点。有没有更清洁的方法来做到这一点?
注意:我不介意解决方案是否涉及特定于 linux 的工具。