Не работает многопоточность ThreadPoolExecutor Python
def method(args, num):
...
# Массив чисел от 50 до 100
nums = [x for x in range(50, 100)]
# Создаю массивы с агрументами и каждым числом
map_args = [(args, a) for a in nums]
with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as exe:
exe.map(method, map_args)
Почему-то не работает, сразу же завершается работа с кодом 0. Не могу понять почему?
Может как-то иначе аргументы в метод передавать? exe.map(method, map_args)
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Вам нужно ещё проитерироваться по результатам маппинга:
result = exe.map(method, map_args)
for res in result:
print(res)
С передачей аргументов у вас, кажется, тоже проблемы, но главное то, что вы не потребляете результаты вызова.
Автор решения: whatgenius
→ Ссылка
Ошибка в том, что метод принимает 2 аргумента args и num, а я передаю только 1 - map_args. Как передавать 2 аргумента я не знаю, но можно все еще передавать map_args, заменив method(args, num) на method(data), и распаковывать data - args, num = data.
def method(data):
args, num = data
...