[英]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.