Как ограничить количество активных потоков в Python?
Я новичок в Python и добился некоторого прогресса сthreading
- Я занимаюсь конвертированием музыкальных файлов и хочу иметь возможность использовать несколько ядер на моей машине (один активный поток преобразования на ядро).
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()
Все работает, все файлы закодированы, браво! ... однако все процессы запускаются сразу, но я хочу запускать только два (по одному для каждого ядра). Как только один закончен, я хочу, чтобы он перешел к следующему в списке, пока он не закончился, а затем продолжил программу.
Как мне это сделать?
(Я посмотрел на пул потоков и функции очереди, но не могу найти простой ответ.)
Редактировать: возможно я должен добавить, что каждая из моих тем используетsubprocess.Popen
запустить отдельную командную строкудекодер (flac) отправляется на стандартный вывод, который подается в командную строкукодировщик (Неточный / MP3).