python - 将 concurrent.futures.ThreadPoolExecuter() 与 kwargs 一起使用
问题描述
如何将 concurrent.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
现在,让我们使用具有多个输入参数的 func:
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
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
解决方案
使用 lambda 函数来包装some_kwargs
:
with concurrent.futures.ThreadPoolExecutor() as executer:
executer.map(lambda x: some_kwargs(**x), kwargs_list)
请注意,**kwargs_list
将上述内容提升TypeError
为kwargs_list
列表,而不是字典。
推荐阅读
- pyspark - pyspark sum 使用开始和结束日期按月份和日期分组
- ruby-on-rails - 如何使用 Ruby 生成两个地址之间的 IP 地址列表
- php - 将字符和数字之间的字符串拆分为数组PHP
- php - 删除 Woocommerce 帐单字段不会将其从我的帐户帐单地址中删除
- java - ConcreteA 不是抽象的,不会覆盖 InterfaceC 中的抽象方法 doSomething(InterfaceA)
- git - 将深度嵌套的 Rust `Result`s 和 `Option`s 处理重构为更具功能性的风格
- python - 如何控制plotnine中的刻面高度和宽度?
- sql - 根据与另一个表的几何相交将列数据添加到表中 - PostgreSQL
- machine-learning - Gensim 的潜在狄利克雷分配实现
- r - R中的夏令时 - 正确读取时间戳的问题