J'ai créé un programme assez volumineux qui prend beaucoup de temps et j'ai commencé à chercher des moyens d'accélérer le programme.Exécution de Python sur plusieurs cœurs
J'ai trouvé que si j'ouvre le gestionnaire de tâches pendant l'exécution du programme, un seul cœur est utilisé.
Après quelques recherches, je trouve ce site: Why does multiprocessing use only a single core after I import numpy? qui donne une solution de os.system("taskset -p 0xff %d" % os.getpid())
, mais cela ne fonctionne pas pour moi, et mon programme continue de fonctionner sur un seul noyau.
J'ai alors trouvé ceci: is python capable of running on multiple cores?, qui pointait vers l'utilisation du multitraitement.
Alors après avoir regardé multitraitement, je suis tombé sur ce documentaire sur la façon de l'utiliser https://docs.python.org/3/library/multiprocessing.html#examples
J'ai essayé le code:
from multiprocessing import Process
def f(name):
print('hello', name)
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
a = input("Finished")
Après l'exécution du code (pas IDLE) Il a dit ceci:
Finished
hello bob
Finished
note: après avoir annoncé terminé la première fois que je pressais entrer
Donc, après cela, je suis encore plus confus et j'ai deux questions
Première: Il ne fonctionne toujours pas avec plusieurs noyaux (j'ai un 8 core Intel Core i7)
Deuxième: Pourquoi est-il fait entrée "Terminé" avant d'exécuter le code d'instruction if (et il n'est même pas encore terminé!)
Oui, parce que vous avez un seul processus, il n'utilisera un seul noyau. –
Aussi, utilisez-vous 'numpy'? Parce que ce lien ne semble pas pertinent. –
Alors, comment est-ce que j'utiliserais plusieurs noyaux dans la situation de devoir faire beaucoup de multiplier/soustraire dans une instruction for? par exemple. 'pour chaque gamme comprise (1000): a = a * each' –