2

tout le monde. J'ai un fichier Python (par exemple nommé: run.py). Ce programme prend quelques paramètres (python run.py param1 param2 ...) et chaque paramètre de tuple est un paramètre. Maintenant, je dois exécuter plusieurs paramètres simultanément pour terminer tout le plus tôt possible. J'ai écrit un fichier run.sh comme suit:Comment écrire un script pour exécuter plusieurs processus dans une machine multicœur efficacement

python run.py setting1 & 
python run.py setting2 & 
#more setting 
... 
wait 

Ce fichier va exécuter tous les processus simultanément, non? Et je cours sur la machine 64 core cpu. J'ai quelques questions ici:

  1. Est-ce que chaque processus fonctionnera sur un noyau ou pas?
  2. Si non, comment puis-je faire cela?
  3. Si je peux exécuter un processus par un noyau, durée de SETTING1 sera égal à temps en cours d'exécution quand je viens de lancer un processus individuel: python run.py SETTING1
+0

Regardez ** GNU Parallel **. Vous pouvez contrôler combien de processus s'exécutent facilement et générer des permutations d'arguments. Effectuez une recherche sur StackOverflow pour '[gnu-parallel]' et cliquez sur 'latest'. –

Répondre

0

Avez-vous essayé d'utiliser le module multiprocessing?

En supposant que vous voulez exécuter une fonction work(arg1, arg2) plusieurs fois en parallèle, vous finiriez avec quelque chose comme ça

import multiprocessing 
p = multiprocessing.Pool(multiprocessing.cpu_count() 
results = p.starmap(work, [(arg11, arg12), (arg21, arg22)....] 
# do something with the list of results 

Si vos fonctions tous très différents les uns des autres, alors vous pouvez vous en sortir par écrit un wrapper de fonction, comme ceci:

def wrapper(dict_args, inner_function): 
    return inner_function(dict_args) 
# then launch the multiprocessing mapping 

p.starmap(wrapper, [({'arg1': v1, 'arg2': v2}, job1), ({'foo': bar}, job2)..] 
+0

merci, je vais essayer. Mais comme vous le savez, je ne fais pas que tourner sur un seul fichier, mais aussi sur de nombreux fichiers indépendamment. par exemple, le fichier run1.py pour le travail 1, run2.py pour le travail 2 ... –