Vor diesem lief, ich zwei Befehl in for-Schleife laufe, wie für x in $ set: Befehl Um Zeit zu sparen, möchte ich diese beiden Befehle in derselben lief Zeit, wie Parallelverfahren in Make-DateiPython Multi-Befehl in der gleichen Zeit
Dank Lyn
Vor diesem lief, ich zwei Befehl in for-Schleife laufe, wie für x in $ set: Befehl Um Zeit zu sparen, möchte ich diese beiden Befehle in derselben lief Zeit, wie Parallelverfahren in Make-DateiPython Multi-Befehl in der gleichen Zeit
Dank Lyn
Das Threading-Modul wird Ihnen aufgrund des Global Interpreter Lock nicht viel Leistung geben.
Ich denke, der beste Weg, dies zu tun ist, das subprocess
Modul zu verwenden und jeden Befehl mit seinem eigenen stdout zu öffnen.
processes = {}
for cmd in ['cmd1', 'cmd2', 'cmd3']:
p = subprocess.Popen('cmd1', stdout=subprocess.PIPE)
processes[p.stdout] = p
while len(processes):
rfds, _, _ = select.select(processes.keys(), [], [])
for fd in rfds:
process = processses[fd]
print fd.read()
if process.returncode is not None:
print "Process {0} returned with code {1}".format(process.pid, process.returncode)
del processes[fd]
Sie haben grundsätzlich wählen verwenden, um zu sehen, welche Datei-Deskriptoren bereit sind, und Sie haben ihre Rückkehr zu überprüfen, um zu sehen, ob ein „lesen“ verursacht Tun sie zu verlassen. Prozesse gehen grundsätzlich in einen Wartezustand, bis ihr stdout geschlossen ist. Wenn Sie einige Dinge erledigen möchten, während Sie warten, können Sie eine Zeitüberschreitung bei select.select() setzen, damit Sie nach so langer Zeit nicht mehr warten müssen. Sie können die Länge von RFDs testen und wenn es 0 ist, dann wissen Sie, dass das Timeout passiert ist.
Blick auf das threading Modul.
twisted
oder select
Modul ist wahrscheinlich, was Sie suchen.
Wenn alles, was Sie tun möchten, eine Reihe von Batch-Befehle, Shell-Skripte, dh
#!/bin/sh
for i in "command1 command2 command3"; do
$i &
done
könnte besser funktionieren. Abwechselnd, ein Makefile wie du gesagt hast.
Lesen Sie über http://docs.python.org/library/threading.html – GWW
Warum verwenden Sie nicht 'subprocess.Popen()'? –