J'ai un script python qui a un temps d'exécution élevé (4 jours lors du test d'un seul script sur une seule machine virtuelle) qui fonctionne sur une liste de fichiers basée sur ses arguments d'entrée nous fournissons.Plusieurs scripts Python sur une machine multicœur unique
La liste d'arguments que je voulais tester est très longue et l'exécution séquentielle de chacun d'entre eux n'est pas réalisable en raison du coût élevé de l'infrastructure.
J'ai donc essayé d'exécuter le script indépendamment avec différents arguments sur ma machine à 12 cœurs, par ex.
nohup python script.py 1 &
nohup python script.py 2 &
et les 8 autres fois .. pensant que chaque processus sera attribué à chaque noyau de façon indépendante et 2 noyau sera en veille, car il n'y a pas de chevauchement dans les fichiers sur lesquels les scripts travailleraient, toute Une condition de concurrence ou une impasse ne se produirait pas car l'argument que nous passons à tous les scripts est différent, donc pas de problème avec GIL. Ce que j'ai observé est que les scripts python individuels ne fonctionnent pas au même rythme ou suivant la chronologie précédemment notée, tous les dix processus distincts devraient terminer dans les 4 jours mais cela a été comme 14 jours mais seulement quelques threads ont terminé et cela aussi en seulement 1-2 jours. Les autres processus sont en retard, ce que je pouvais voir à partir du fichier journal généré.
Quelqu'un peut m'aider s'il vous plaît à comprendre ce comportement pour python ??
" tous les dix processus distincts devraient se terminer dans les 4 jours "Etes-vous sûr de cela? Les avez-vous dirigés séparément? Est-ce qu'ils dépendent d'une ressource commune qui peut limiter la vitesse de traitement? –
Oui, je connais la liste des fichiers dont ils dépendent, et tous sont distincts. Il n'y a pas de fichier/ressource commun entre eux. – lorenzofeliz
Le processeur est le goulot d'étranglement seulement dans un programme mal écrit, ou lorsque vous avez des calculs lourds (modèles météorologiques ou océanographiques). Si le lancement de plusieurs processus sur une machine multicœur n'augmente pas beaucoup la vitesse, vous devriez vous demander si votre traitement pourrait être E/S ou lié à la mémoire au lieu du processeur –