测量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