Передача нескольких параметров в ThreadPoolExecutor.map () - PullRequest
0 голосов
/ 18 июня 2020

Следующий код:

import concurrent.futures 

def worker(item, truefalse):
    print(item, truefalse)
    return item

processed = []
with concurrent.futures.ThreadPoolExecutor() as pool:
    for res in pool.map(worker, [1,2,3], False):
        processed.append(res)

Выдает исключение: TypeError: zip argument #2 must support iteration

Я также пробовал: for res in pool.map(worker, ([1,2,3], False)):

Что дает: TypeError: worker() missing 1 required positional argument: 'truefalse'

Как передать несколько аргументов функции при вызове ThreadPoolExecutor.map()?

1 Ответ

3 голосов
/ 18 июня 2020

Если вы пытаетесь вызвать рабочую функцию с помощью 1, False, затем 2, False, затем 3, False, вам нужно расширить свой одиночный False до итерации False s по крайней мере до тех пор, пока другой итеративный. Два подхода, которые работают:

  1. Умножение последовательности:

    for res in pool.map(worker, [1,2,3], [False] * 3):
    
  2. Используйте itertools.repeat, чтобы сделать его нужной длины (map остановится, когда будет исчерпана самая короткая итерация). Добавьте from itertools import repeat в начало файла, а затем используйте:

    for res in pool.map(worker, [1,2,3], repeat(False)):
    

Для записи, это то же самое, что и с обычным map, а не только ThreadPoolExecutor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...