multitraitement AttributeError module objet n'a pas d'attribut '_le_path__'
j'ai un long script qui à la fin a besoin pour exécuter une fonction à tous les éléments de la liste énorme qui prend du temps,de considérer par exemple:
input_a= [1,2,3,4] # a lengthy computation on some data
print('test.1') # for testing how the script runs
input_b= [5,6,7,8] # some other computation
print('test.2')
def input_analyzer(item_a): # analyzing item_a using input_a and input_b
return(item_a * input_a[0]*input_b[2])
from multiprocessing import Pool
def analyzer_final(input_list):
pool=Pool(7)
result=pool.map(input_analyzer, input_list)
return(result)
my_list= [10,20,30,40,1,2,2,3,4,5,6,7,8,9,90,1,2,3] # a huge list of inputs
if __name__=='__main__':
result_final=analyzer_final(my_list)
print(result_final)
return(result)
la sortie de ce codes, varie exécuter pour exécuter, mais ce que toutes les pistes ont en commun plusieurs cours d'exécution de script en entier, il semble que par l'affectation de 7 comme la Piscine, l'ensemble du script sera exécuté environ 8 fois!
je ne sais pas si j'ai le concept de multitraitement bien, mais j'ai pensé que ce qu'il devrait faire, c'est juste l'exécution de la fonction "input_analyzer' utilisation de plusieurs Processeurs et ne s'exécute pas le script en entier plusieurs fois. dans le cas de mon code réel, c'est tellement long et il me donne une erreur étrange :
sans l'aide de multitraitement j'exécute ce code, je ne sais pas ce que je fais de mal ici, en particulier avec l'erreur "AttributeError module objet n'a pas d'attribut" chemin'"j'apprécie toute l'aide.
OriginalL'auteur user3015703 | 2014-09-10
Vous devez vous connecter pour publier un commentaire.
Indice de la Réponse: C'est pourquoi l'exception est levée. Piscine définition est à l'extérieur
if __name__ == '__main__'
Fixe...
Le python docs toucher sur ce scénario: https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers
Je ne trouve pas que ce soit un problème lors de l'utilisation de multitraitement.mannequin à tous.
OriginalL'auteur Garren S
Multitraitement doit être en mesure d'importer votre module, comme indiqué en haut de la documentation.
Vous avez un tas de code assis au module (global) de la portée, de sorte que ce sera exécutée chaque fois que le module est importé.
Le mettre dans votre
if __name__ == '__main__'
bloc, ou mieux encore, dans une fonction.ici, le script sera importé par le nombre de Processeurs-je attribuer dans la piscine, non?
Vos fonctions ne doit pas dépendre de variables globales. Regardez les lignes directrices de la programmation dans la documentation que j'ai évoqué: l'état partagé est très dangereux dans le multitraitement.
Oui, ce sera le nombre de processus que vous demandez.
Grâce sapi, je vois comment ça fonctionne maintenant. et avez-vous une idée sur le vrai code d'erreur " importerror:random_generator_final n'est pas un paquet!", ce qui est probablement le problème avec mon code?
OriginalL'auteur sapi