Maison  >  Article  >  développement back-end  >  Pourquoi un exemple de multitraitement entraîne-t-il une \'AttributeError\' avec les fonctions intégrées ?

Pourquoi un exemple de multitraitement entraîne-t-il une \'AttributeError\' avec les fonctions intégrées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-17 19:48:30348parcourir

Why Does Multiprocessing Example Result in 'AttributeError' with Built-in Functions?

Pourquoi un exemple de multitraitement donne AttributeError

Dans une tentative de se plonger dans le multitraitement, un individu a rencontré une AttributeError en adaptant l'exemple d'introduction de la documentation :

<code class="python">from multiprocessing import Pool
def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))</code>

L'erreur : "AttributeError : impossible d'obtenir l'attribut 'f' sur le " a rendu l'utilisateur perplexe.

Pour résoudre ce problème, il est important de comprendre que multiprocessing.Pool a une fonctionnalité de conception particulière. Comme indiqué dans le problème Python n° 25053, Pool échoue parfois lorsque vous travaillez avec des objets non définis dans les modules importés. Pour contourner le problème, vous pouvez définir votre fonction dans un fichier séparé et importer le module.

Voici un exemple :

defs.py :

<code class="python">def f(x):
    return x*x</code>

run.py :

<code class="python">from multiprocessing import Pool
import defs

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(defs.f, [1, 2, 3]))</code>

Cette modification devrait résoudre l'AttributeError. Cependant, il convient de noter que l'exemple donné dans la documentation n'est peut-être pas le plus adapté aux débutants en raison de ce problème potentiel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn