2010-02-08 4 views
3

J'ai un pool de processus à exécuter. Je voudrais utiliser pleinement la machine, de sorte que tous les processeurs exécutent des processus. Je ne veux pas surcharger le système, donc ce que je veux vraiment, c'est # executing_processes = # cpus à tout moment. J'ai également besoin de stocker le code stdout, stderr et retour de chaque processus terminé. Comment cela peut-il être réalisé en Python?Exemple simple d'ordonnancement de processus en Python?

EDIT: par 'processus', je veux dire un processus shell.

+0

"# executing_processes = # cpus" va sous-utiliser votre système. Comme un seul processus peut rarement utiliser 100% des ressources, vous devriez probablement supprimer cette restriction sur votre question. –

+0

D'une manière générale, votre déclaration est correcte, mais dans mon cas particulier, chaque processus atteint 100% d'utilisation du processeur. –

+0

@zr: Absolument 100%, tout le temps? Il est très peu probable qu'un processus ne fasse jamais une seule demande système et n'attende jamais une ressource, mais augmente immédiatement jusqu'à 100% de l'utilisation du processeur. Cela ressemble au genre de contrainte artificielle qui n'apparaît que dans un problème de devoirs. –

Répondre

2

Si vous parlez de votre propre -Python mis en œuvre, processus:

Le module multiprocessing vous donne la possibilité de reproduire de multiples processus. En particulier, il semble que vous voulez créer multiprocessing.cpu_count nombres de processus, potentiellement dans un Pool.

Si vous parlez de programmes distincts que vous souhaitez exécuter à travers la coquille:

Le module subprocess vous permettra de frayer des processus grâce à sa classe Popen, qui a des paramètres pour stdin, stdout, sterr qui acceptent des objets de type fichier. Popen.returncode peut être utilisé pour vérifier le code de retour.

+0

Je faisais référence à ce dernier. –