Python multitraitement de la piscine.carte pour de multiples arguments

Dans le Python de multitraitement de la bibliothèque, est-il une variante de la piscine.carte prenant en charge plusieurs arguments?

text = "test"
def harvester(text, case):
    X = case[0]
    text+ str(X)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=6)
    case = RAW_DATASET
    pool.map(harvester(text,case),case, 1)
    pool.close()
    pool.join()
  • À ma grande surprise, j'ai pu faire ni partial ni lambda ce faire. Je pense que cela a à voir avec la façon étrange que les fonctions sont transmis à la sous-processus (via pickle).
  • C'est un bug dans la version 2.6 de Python, mais a été fixé 2.7: bugs.python.org/issue5228
  • Tout simplement remplacer pool.map(harvester(text,case),case, 1) par: pool.apply_async(harvester(text,case),case, 1)
  • merci de ne pas modifier OP questions qui biaiser les réponses qui ont été données auparavant. L'ajout de return à harvester() tourné @senderie 's réponse en être infidèle. Ce qui n'aide pas les futurs lecteurs.
  • Je dirais que la solution facile serait de pack tous les arguments dans un tuple et décompressez-le dans l'exécution de la touche func. Je l'ai fait quand j'avais besoin d'envoyer compliqué de multiples arguments pour un func exécutée par un pool de processus.
InformationsquelleAutor user642897 | 2011-03-26