Je voudrais utiliser le multitraitement pour générer la matrice de transition d'une chaîne de Markov.Utilisation du multitraitement avec plusieurs valeurs de retour et dictionnaires ordonnés
La fonction generateKeys()
génère un dictionnaire avec de nouveaux débits et un dictionnaire avec de nouvelles clés pour chaque état dans l'espace d'état après une transition.
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
La raison d'utiliser OrderedDict
est ici que les clés se mélangent avec une dict
régulière dans une étape suivante (Dans l'étape suivante, je concaténer les tableaux de numpy dans les dictionnaires et les stocker dans une coo_matrix clairsemée). Comme les clés du dictionnaire sont uniques, il devrait être possible d'exécuter generateKeys()
en parallèle et de remplir plus rapidement les deux dictionnaires sur une machine multicœur.
J'ai examiné le paquet multiprocessing
et quelques exemples, mais les exemples que j'ai vus étaient pour une seule valeur de retour et sans dictionnaires ordonnés. Je ne comprends pas encore vraiment comment l'appliquer dans mon environnement. Quelqu'un peut-il me montrer comment cela fonctionne?
Si vous avez besoin pour maintenir l'ordre pour 'transitionFunction' appelle, le parallélisme est pas la voie à suivre .. – Cyrbil
@Cyrbil Hmm, vous avez raison. Je vois déjà une solution de contournement pour cela en utilisant des dictionnaires réguliers et le tri par clés. – Forzaa