将并发.futures.ThreadPoolExecuter()与kwargs一起使用

问题描述 投票:0回答:1

我如何将并发.futures.ThreadPoolExecuter()。map与包含kwargs字典的列表一起使用?

使用仅带有一个参数的func,我可以像这样使用执行程序:

import concurrent.futures

def one_arg(arg):
    print(arg)

arg_list = [1, 2, 3]

with concurrent.futures.ThreadPoolExecutor() as executer:
    executer.map(one_arg, arg_list)

output:
1
2
3

现在,让我们使用带有多个输入参数的函子:

def some_kwargs(kwarg_1, kwarg_2, kwarg_3):
    print('kwarg_1: {} - kwarg_2: {} - kwarg_3: {}'.format(kwarg_1, kwarg_2, kwarg_3))

kwargs = {"kwarg_1": "1_1", "kwarg_2": "1_2", "kwarg_3": "1_3"}
some_kwargs(**kwargs)

output:
'kwarg_1: 1_1 - kwarg_2: 1_2 - kwarg_3: 1_3'

现在,我真正想要得到的是当我有kwargs时如何使用线程调用some_kwargs

list
python multithreading concurrency kwargs
1个回答
0
投票

使用lambda函数包装kwargs_list = [{"kwarg_1": "1_1", "kwarg_2": "1_2", "kwarg_3": "1_3"}, {"kwarg_1": "2_1", "kwarg_2": "2_2", "kwarg_3": "2_3"}, {"kwarg_1": "3_1", "kwarg_2": "3_2", "kwarg_3": "3_3"}] with concurrent.futures.ThreadPoolExecutor() as executer: executer.map(some_kwargs, **kwargs_list) # TypeError: map() argument after ** must be a mapping, not list

some_kwargs

请注意,with concurrent.futures.ThreadPoolExecutor() as executer: executer.map(lambda x: some_kwargs(**x), kwargs_list) 引发以上**kwargs_list,因为TypeError是列表,而不是字典。

© www.soinside.com 2019 - 2024. All rights reserved.