Как ограничить количество параллельных потоков в Python?Как ограничить количество параллельных потоков в Python?
Например, у меня есть каталог со многими файлами, и я хочу обработать все из них, но только по 4 параллельно.
Вот то, что я до сих пор:
def process_file(fname):
# open file and do something
def process_file_thread(queue, fname):
queue.put(process_file(fname))
def process_all_files(d):
files=glob.glob(d + '/*')
q=Queue.Queue()
for fname in files:
t=threading.Thread(target=process_file_thread, args=(q, fname))
t.start()
q.join()
def main():
process_all_files('.')
# Do something after all files have been processed
Как я могу изменить код таким образом, что только 4 нити выполняются в то время?
Обратите внимание, что я хочу подождать, пока все файлы будут обработаны, а затем продолжите работу и обработайте обработанные файлы.
Вы пробовали [нескольких процессов] (http://docs.python.org/2/library/multiprocessing.html # модуль-многопроцессорность) Бассейны? На Python 3 вы также можете использовать [фьючерсы] (http://docs.python.org/dev/library/concurrent.futures.html). – javex
Вы также можете использовать ['futures'] (https://pypi.python.org/pypi/futures) в Python 2, вам просто нужно установить backport. – abarnert
concurrent.futures действительно лучший способ сделать это. – JBernardo