我使用joblib并行处理4帧(从视频拍摄的图像)。为此使用了并行for循环,其中每个循环为不同的帧调用相同的函数。由于捕获帧只占用总处理时间的1%(通过使用line profiler的python脚本分析发现),因此我首先捕获4个帧,然后将其移交给joblib进行多处理。
我发现使用笔记本电脑,这个过程加快了大约5倍。在Rapberry pi-2 (四核)上,观察到了几乎8倍的加速,在Beaglebone Black (不是多核)上,也观察到了近7倍的加速。那么,joblib到底是如何分配任务的呢?
发布于 2015-05-03 04:21:58
默认情况下,joblib.parallel使用Python multiprocessing模块派生单独的Python worker进程,以便在单独的CPU上并发执行任务。
multiprocessing模块可以利用多核/处理器(它通过透明地启动多个进程来绕过GIL )。它提供了一些类似于线程模块的原语。
整体效率取决于内核如何共享内存访问的细微之处。
https://stackoverflow.com/questions/29975082
复制相似问题