Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Joblib中的并行处理使代码运行得更慢_Python_List_Loops_Parallel Processing_Joblib - Fatal编程技术网

Python:Joblib中的并行处理使代码运行得更慢

Python:Joblib中的并行处理使代码运行得更慢,python,list,loops,parallel-processing,joblib,Python,List,Loops,Parallel Processing,Joblib,我想集成一个并行处理,使for循环运行得更快 然而,我注意到这只会使我的代码运行变慢。请参阅下面的示例,其中我使用joblib和随机整数列表上的一个简单函数。请注意,没有并行处理,它的运行速度比使用并行处理时快 对正在发生的事情有什么见解吗 我得到以下输出: without parallel processing: 0.0070569515228271484 with parallel processing: 0.10714387893676758 参数batch_size=lens

我想集成一个并行处理,使for循环运行得更快

然而,我注意到这只会使我的代码运行变慢。请参阅下面的示例,其中我使用joblib和随机整数列表上的一个简单函数。请注意,没有并行处理,它的运行速度比使用并行处理时快

对正在发生的事情有什么见解吗

我得到以下输出:

without parallel processing:  0.0070569515228271484
with parallel processing:     0.10714387893676758
参数batch_size=lens有效地表示为每个进程分配一批s作业。这意味着您创建8个线程,但将所有工作负载分配给1个线程

此外,您可能希望增加工作负载以获得可测量的优势。我更喜欢使用时间。睡眠延迟:

def f(x):
    time.sleep(0.001)
    return x**x

out2 = Parallel(n_jobs=8,
                #batch_size=len(s),
                backend="threading")(delayed(f)(x) for x in s)
无并行处理:11.562264442443848

带并行处理:1.412865400314331


由于设置更复杂,并行处理涉及额外的开销。通常情况下,你不希望并行化需要几微秒才能完成的任务。我也在一个更复杂的模糊匹配函数上进行了尝试,但它仍然需要很长时间。如果你真的愿意理解发生了什么,以及如何更快地处理,一定要阅读上面发布的链接中的论证和测试结果。[PARALLEL]-调度不会带来免费的加速,因此,您需要学习大量基于性能的设计技巧,并测试大量实际附加成本和潜在的性能增益。这的确是一个令人兴奋的领域。恕我直言,先生,根据阿姆达尔定律,在f中加入睡眠是一种虚假的错觉。这里的[PARALLEL]-部分非常小,以至于[SERIAL]-部分占主导地位,并且在[PARALLEL]-部分中添加睡眠不会提高处理性能,但会扭曲[SER]+[PAR]/1 v/s[SER]+[PAR]/N的组成的比较。通过添加睡眠,[PAR]-设置和[PAR]-终止开销的成本更加隐蔽。
def f(x):
    time.sleep(0.001)
    return x**x

out2 = Parallel(n_jobs=8,
                #batch_size=len(s),
                backend="threading")(delayed(f)(x) for x in s)