По какой-то причине я не могу получить параллельную функцию 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.
Я думаю, что это может зависеть от вида, который вы используете, - делая это с сбалансированным по нагрузке представлением, может запускать его только на одном. Я не уверен в этом. –