До сих пор у меня есть параллельные функции, сопоставляя их по спискам, которые распределяются по различным кластерам с использованием функции 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.