IPython并行DirectView.apply应用不在p中运行

2024-04-26 01:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,我无法让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。你知道吗


Tags: importclientviewidsformatmapdatetimetime
1条回答
网友
1楼 · 发布于 2024-04-26 01:20:47

似乎我误解了文件。Here它说apply(f, *args, **kwargs)在远程引擎上调用f(*args, **kwargs),返回结果。

如果我理解正确,这意味着该功能应用于所有引擎,而不是只在其中一个引擎上运行一次。你知道吗

相关问题 更多 >