Je rencontre souvent des problèmes lorsque je veux rapidement faire un truc simple sur un ensemble d'objets. Mon choix naturel est d'utiliser IPython Parallel pour sa simplicité, mais souvent je dois faire face à des objets non picables. Après avoir essayé pendant quelques heures, je me résigne généralement à exécuter mes tâches du jour au lendemain sur un seul ordinateur, ou à faire une chose stupide, comme diviser les choses de manière semi-manuelle pour exécuter plusieurs scripts python.Tâches parallèles simultanées avec IPython Parallel (ou un autre paquet) en fonction des objets non saisissables
Pour donner un exemple concret, supposons que je souhaite supprimer toutes les clés d'un compartiment S3.
Ce que je fais normalement sans penser est:
import boto
from IPython.parallel import Client
connection = boto.connect_s3(awskey, awssec)
bucket = connection.get_bucket('mybucket')
client = Client()
loadbalancer = c.load_balanced_view()
keyList = list(bucket.list())
loadbalancer.map(lambda key: key.delete(), keyList)
Le problème est que l'objet Key
dans boto
est unpickable (*). Cela se produit très souvent dans des contextes différents pour moi. C'est aussi un problème avec le multiprocessing, execnet, et tous les autres frameworks et libs que j'ai essayés (pour des raisons évidentes: ils utilisent tous le même pickler pour sérialiser les objets).
Est-ce que vous avez aussi ces problèmes? Existe-t-il un moyen de sérialiser ces objets plus complexes? Dois-je écrire mon propre pickler pour ces objets particuliers? Si oui, comment puis-je dire à IPython Parallel de l'utiliser? Comment écrire un pickler?
Merci!
(*) Je suis conscient que je peux simplement faire une liste des noms clés et faire quelque chose comme ceci:
loadbalancer.map(lambda keyname: getKey(keyname).delete())
et définir la fonction getKey
dans chaque moteur du groupe IPython . Ceci est juste un exemple particulier d'un problème plus général que je trouve souvent. Peut-être que c'est un mauvais exemple, car il peut être facilement résolu d'une autre manière.
Je suis sûr que les tâches sont assez embarrassés sans vous moquer d'eux sur le SO! –