2017-02-20 4 views
0

Для сегмента кода ниже, я хотел бы ограничить количество выполняемых потоков 20 потоками. Моя попытка сделать это кажется ошибочной, потому что, как только счетчик достигнет 20, он просто не создаст новые потоки, но те значения «a» не будут вызывать функцию do_something() (которая должна учитывать каждый «a» в массиве). Любая помощь приветствуется.Python Ограничение количества разрешенных потоков

count = 0 
for i in range(len(array_of_letters)): 

    if i == "a": 
     if count < 20: 
      count=+1 
      t = threading.Thread(target=do_something, args = (q,u)) 

      print "new thread started : %s"%(str(threading.current_thread().ident))  
      t.start() 
      count=-1 
+1

вы, вероятно, хотите 'count + = 1' (который ведет себя как' count = count + 1'), а не 'count = + 1' (это просто' count = 1', то же самое для '-' –

ответ

1

concurrent.futures имеет ThreadPoolExecutor класс, который позволяет направляющее множество задач и указать максимальное количество рабочих потоков:

with ThreadPoolExecutor(max_workers=20) as executor: 
    for letter in array_of_letters): 
     executor.submit(do_something, letter) 

Проверить больше примеров в пакете документации.