Я хотел бы использовать многопроцессорную обработку для генерации матрицы перехода цепи Маркова.Использование многопроцессорности с несколькими возвращаемыми значениями и упорядоченными словарями
Функция generateKeys()
создает словарь с новыми скоростями и словарь с новыми ключами для каждого состояния в пространстве состояний после перехода.
from collections import OrderedDict
def generateKeys():
idxDict = OrderedDict()
rateDict = OrderedDict()
for key,state in stateDict.items():
newkeys,rates = transitionFunction(state)
idxDict[key] = newkeys
rateDict[key] = rates
return idxDict,rateDict
Причина использовать OrderedDict
здесь является то, что ключи перепутать с обычным dict
на следующей стадии (В следующем шаге я конкатенировать Numpy массивы в словарях и хранить их в разреженном coo_matrix).
Поскольку словарные ключи уникальны, должно быть возможно запустить generateKeys()
параллельно и заполнить два словаря намного быстрее на многоядерной машине.
Я рассмотрел пакет multiprocessing
и некоторые примеры, но примеры, которые я видел, были для одного возвращаемого значения и без заказанных словарей. Я пока не понимаю, как применить его в моих настройках. Может ли кто-нибудь показать мне, как это работает?
Если необходимо сохранить порядок для 'transitionFunction' вызовов, параллелизм не путь .. – Cyrbil
@Cyrbil Хм, ты прав. Я уже вижу обходное решение для этого, используя регулярные словари и сортировку по ключам. – Forzaa