joblib parallel compuction time
Joblib 用于并行计算,njob>1(njob=2 完成需要 12.6 秒)比 njob=1(1.3 秒完成)花费更多时间。我在 16GB RAM 的 mac OSX 10.9 中。我做错了什么吗?这是一个简单的演示代码:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
from joblib import Parallel , delayed
def func ():
for i in range(200):
for j in range(300):
yield i , j
def evaluate(x):
i=x[0]
j=x[1]
p=i*j
return p, i, j
if __name__ == ‘__main__’:
results = Parallel(n_jobs=3, verbose=2)(delayed(evaluate)(x) for x in func())
res, i, j = zip(*results)
|
- 另请参阅:stackoverflow.com/questions/21027477/… 已给出此问题的全面答案。
简短的回答:Joblib 是一个多处理系统,并且在为 3 个同时作业的每一个启动一个新的 python 进程时有相当多的开销。因此,如果您添加更多作业,您的特定代码可能会变得更慢。
这里有一些关于此的文档。
解决方法不是很好:
接受开销
不要使用并行代码
使用多线程而不是多处理。不幸的是,除非您使用完全编译的函数代替评估,否则很少选择多线程,因为 python 几乎总是单线程的(请参阅 python GIL)。
也就是说,对于需要很长时间的函数,多处理通常是值得的。根据您的应用程序,这确实是一个判断电话。请注意,函数中使用的每个变量都被复制到每个进程中——变量复制在 python 中很少见,所以这可能是一个惊喜。因此,开销部分取决于显式或隐式传递的变量大小(例如,通过使用全局变量)。
来源:https://www.codenong.com/22648464/
微信公众号
手机浏览(小程序)
Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in
/mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line
57
Warning: get_headers(): Failed to enable crypto in
/mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line
57
Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_10186.jpg): failed to open stream: operation failed in
/mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line
57