J'ai un script Python que je veux l'utiliser comme un contrôleur à un autre script Python. J'ai un serveur avec 64 processeurs, si voulez lancer jusqu'à 64 processus enfants de ce second script Python. L'enfant script est appelé:
$ python create_graphs.py --name=NAME
où NOM est quelque chose comme XYZ, ABC, NYU etc.
Dans mon contrôleur de parent script que j'ai récupérer le nom de la variable à partir d'une liste:
my_list = [ 'XYZ', 'ABC', 'NYU' ]
Donc ma question est, quelle est la meilleure façon de spawn hors de ces processus comme des enfants? Je veux limiter le nombre d'enfants à 64 ans, à une époque, donc besoin de suivre l'état (si l'enfant est terminée ou pas) pour que je puisse garder efficacement l'ensemble de la génération en cours d'exécution.
J'ai regardé dans l'aide de la sous-processus, mais l'a rejeté parce qu'il ne génère un seul enfant à la fois. J'ai enfin trouvé le multiprocesseur paquet, mais j'avoue être submergé par l'ensemble de threads contre les sous-processus de documentation.
Pour l'instant, mon script utilise subprocess.call
seulement frayer un enfant à un moment et ressemble à ceci:
#!/path/to/python
import subprocess, multiprocessing, Queue
from multiprocessing import Process
my_list = [ 'XYZ', 'ABC', 'NYU' ]
if __name__ == '__main__':
processors = multiprocessing.cpu_count()
for i in range(len(my_list)):
if( i < processors ):
cmd = ["python", "/path/to/create_graphs.py", "--name="+ my_list[i]]
child = subprocess.call( cmd, shell=False )
Je le veux vraiment, pour frayer, en hausse de 64 enfants à la fois. En d'autres stackoverflow questions j'ai vu des gens à l'aide de la File d'attente, mais il semble que ce crée un gain de performance?