2013-05-19 3 views
2

До сих пор у меня есть параллельные функции, сопоставляя их по спискам, которые распределяются по различным кластерам с использованием функции map_sync(function, list).Функция параллелизации словаря в IPython

Теперь мне нужно запустить функцию для каждой записи словаря.

map_sync, похоже, не работает на словари. Я также попытался разбросать словарь и использовать декораторы для параллельной работы функции. Однако словари, похоже, тоже не рассеивают. Есть ли другой способ распараллеливать функции в словарях без необходимости конвертировать в списки?

Это мои попытки до сих пор:

from IPython.parallel import Client 
rc = Client() 
dview = rc[:] 

test_dict = {'43':"lion", '34':"tiger", '343':"duck"} 
dview.scatter("test",test) 

dview["test"] 
# this yields [['343'], ['43'], ['34'], []] on 4 clusters 
# which suggests that a dictionary can't be scattered? 

Излишне говорить, когда я запускаю саму функцию, я получаю сообщение об ошибке:

@dview.parallel(block=True) 
def run(): 
    for d,v in test.iteritems(): 
     print d,v 

run() 

AttributeError
Traceback (самый последний вызов last) in() in run (dict) AttributeError: объект 'str' не имеет атрибута 'iteritems'

Я не знаю, насколько это актуально, но я использую IPython Notebook, подключенный к кластерам Amazon AWS.

ответ

3

Вы можете раскидать Dict с:

def scatter_dict(view, name, d): 
    """partition a dictionary across the engines of a view""" 
    ntargets = len(view) 
    keys = d.keys() # list(d.keys()) in Python 3 
    for i, target in enumerate(view.targets): 
     subd = {} 
     for key in keys[i::ntargets]: 
      subd[key] = d[key] 
     view.client[target][name] = subd 

scatter_dict(dview, 'test', test_dict) 

, а затем работать на ней удаленно, как обычно.

Вы также можете собрать удаленные dicts в один локальный снова:

def gather_dict(view, name): 
    """gather dictionaries from a DirectView""" 
    merged = {} 
    for d in view.pull(name): 
     merged.update(d) 
    return merged 

gather_dict(dv, 'test') 

An example notebook

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