Wie beschränke ich die Anzahl der aktiven Threads in Python?

Bin neu in Python und mache Fortschritte mitthreading - mache eine Konvertierung von Musikdateien und möchte die mehreren Kerne auf meinem Computer nutzen können (ein aktiver Konvertierungsthread pro Kern).

class EncodeThread(threading.Thread):
    # this is hacked together a bit, but should give you an idea
    def run(self):
        decode = subprocess.Popen(["flac","--decode","--stdout",self.src],
                            stdout=subprocess.PIPE)
        encode = subprocess.Popen(["lame","--quiet","-",self.dest],
                                stdin=decode.stdout)
        encode.communicate()

# some other code puts these threads with various src/dest pairs in a list

for proc in threads: # `threads` is my list of `threading.Thread` objects
    proc.start()

Alles funktioniert, alle Dateien werden verschlüsselt, Bravo! ... jedoch werden alle Prozesse sofort erzeugt, und dennoch möchte ich nur zwei gleichzeitig ausführen (einen für jeden Kern). Sobald einer fertig ist, möchte ich, dass er zum nächsten in der Liste wechselt, bis er fertig ist, und dann mit dem Programm fortfährt.

Wie mache ich das?

(Ich habe mir den Thread-Pool und die Warteschlangenfunktionen angesehen, finde aber keine einfache Antwort.)

Bearbeiten: Vielleicht sollte ich hinzufügen, dass jeder meiner Threads verwendetsubprocess.Popen um eine separate Befehlszeile auszuführenDecoder (flac) wird an stdout weitergeleitet, das in eine Befehlszeile eingegeben wirdEncoder (lahm / mp3).

Antworten auf die Frage(6)

Ihre Antwort auf die Frage