IPython并联DirectView.apply不运行并联
IPython parallel DirectView.apply does not run in parallel
出于某种原因,我无法获得 IPython 并行函数 DirectView.apply()
来真正并行化函数调用。 DirectView.map()
按预期工作。我在这里做错了什么吗?一个工作示例脚本
import time
from datetime import datetime
from ipyparallel import Client, require
@require(time)
def wait(seconds=1):
time.sleep(seconds)
if __name__=='__main__':
client = Client()
print('engine ids: {}'.format(client.ids))
dview = client.direct_view((0, 1, 2, 3))
dview.block = False
print('view targets: {}'.format(dview.targets))
print('dview.apply...')
t0 = datetime.now()
results = [dview.apply(wait) for i in range(4)]
while len(results) > 0:
results.pop(0).get()
print('time: {}'.format(datetime.now() - t0))
print('dview.map... ')
t0 = datetime.now()
results = dview.map(wait, [1]*4)
print('time: {}'.format(datetime.now() - t0))
打印
engine ids: [0, 1, 2, 3]
view targets: [0, 1, 2, 3]
dview.apply...
time: 0:00:04.021680
dview.map...
time: 0:00:01.013941
显示 apply
显然没有达到我的预期。
我的系统是Ubuntu14.04,Python3.4.3,IPython4.2.0。
看来我误解了文档。 Here 它说 apply(f, *args, **kwargs)
在远程引擎上调用 f(*args, **kwargs)
,返回结果。
如果我理解正确,这意味着该函数应用于所有引擎,而不是 运行 它只应用于其中一个引擎。
出于某种原因,我无法获得 IPython 并行函数 DirectView.apply()
来真正并行化函数调用。 DirectView.map()
按预期工作。我在这里做错了什么吗?一个工作示例脚本
import time
from datetime import datetime
from ipyparallel import Client, require
@require(time)
def wait(seconds=1):
time.sleep(seconds)
if __name__=='__main__':
client = Client()
print('engine ids: {}'.format(client.ids))
dview = client.direct_view((0, 1, 2, 3))
dview.block = False
print('view targets: {}'.format(dview.targets))
print('dview.apply...')
t0 = datetime.now()
results = [dview.apply(wait) for i in range(4)]
while len(results) > 0:
results.pop(0).get()
print('time: {}'.format(datetime.now() - t0))
print('dview.map... ')
t0 = datetime.now()
results = dview.map(wait, [1]*4)
print('time: {}'.format(datetime.now() - t0))
打印
engine ids: [0, 1, 2, 3]
view targets: [0, 1, 2, 3]
dview.apply...
time: 0:00:04.021680
dview.map...
time: 0:00:01.013941
显示 apply
显然没有达到我的预期。
我的系统是Ubuntu14.04,Python3.4.3,IPython4.2.0。
看来我误解了文档。 Here 它说 apply(f, *args, **kwargs)
在远程引擎上调用 f(*args, **kwargs)
,返回结果。
如果我理解正确,这意味着该函数应用于所有引擎,而不是 运行 它只应用于其中一个引擎。