2016-08-19 1 views
0

По какой-то причине я не могу получить параллельную функцию IPython DirectView.apply(), чтобы действительно распараллелить вызов функции. DirectView.map() работает должным образом. Я здесь что-то не так? Работающий пример скриптаIPython parallel DirectView.apply не работает параллельно

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 показывая, что явно не так, как я ожидал.

Моя система Ubuntu 14.04, Python 3.4.3, IPython 4.2.0.

ответ

0

Похоже, что я неверно истолковал документацию. Here говорится, что apply(f, *args, **kwargs) вызывает f(*args, **kwargs) на удаленных двигателях, возвращая результат.

Если я правильно понимаю, это означает, что функция применяется ко всем двигателям, вместо того, чтобы запускать ее один раз только на одном из них.

+0

Я думаю, что это может зависеть от вида, который вы используете, - делая это с сбалансированным по нагрузке представлением, может запускать его только на одном. Я не уверен в этом. –

 Смежные вопросы

  • Нет связанных вопросов^_^