模块提供了一个joblib
简单的帮助类来使用多处理编写并行 for 循环。
此代码使用列表推导来完成这项工作:
import time
from math import sqrt
from joblib import Parallel, delayed
start_t = time.time()
list_comprehension = [sqrt(i ** 2) for i in range(1000000)]
print('list comprehension: {}s'.format(time.time() - start_t))
大约需要 0.51 秒
list comprehension: 0.5140271186828613s
此代码使用joblib.Parallel()
构造函数:
start_t = time.time()
list_from_parallel = Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(1000000))
print('Parallel: {}s'.format(time.time() - start_t))
大约需要 31 秒
Parallel: 31.3990638256073s
这是为什么?不应该Parallel()
比非并行计算更快吗?
以下是部分内容cpuinfo
:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU @ 2.20GHz
stepping : 0
microcode : 0x1
cpu MHz : 2200.000
cache size : 56320 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes