python 将参数kwargs传递给run_in_executor

wnavrhmk  于 2023-01-19  发布在  Python
关注(0)|答案(4)|浏览(172)

我尝试像这样将参数传递给run_in_executor

loop.run_in_executor(None, update_contacts, data={
        'email': email,
        'access_token': g.tokens['access_token']
    })

但是,我得到了以下错误:
run_in_executor()获得意外的关键字参数“data”
有没有一种通用的方法来传递参数给这个函数?

noj0wjuj

noj0wjuj1#

使用functools.partial;这是执行此类操作的标准方法,在loop.run_in_executor的文档中特别推荐,在Event Loop文档中也有更普遍的建议。
以下是您可能看到的内容:

import functools  # at the top with the other imports

loop.run_in_executor(None, functools.partial(update_contacts, data={
    'email': email,
    'access_token': g.tokens['access_token']
}))

如果您愿意,也可以使用from functools import partial

eimct9ow

eimct9ow2#

你要求的是“通用方式”;最通用的答案是创建一个函数来实现这个目的,如果你想提供的data是调用者本地的,你可以在调用者内部创建这个函数,可能是lambda:

loop.run_in_executor(None,lambda: update_contacts(data={
  'email': email,
  'access_token': g.tokens['access_token']
})

正如所给出的,这与functools.partial的答案没有太大的不同,而且(正如文档所述)它可能会降低调试输出的实用性,但它允许您在执行器上计算data值,并对update_contacts的返回值进行操作。

jckbn6z7

jckbn6z73#

创建调用它的函数:

def foo():
    update_contacts(data={'email': email,'access_token': g.tokens['access_token']})
loop.run_in_executor(None, foo)

,则func也可以是lambda:

loop.run_in_executor(None, lambda: update_contacts(data={'email': email,'access_token': g.tokens['access_token']})

或使用功能工具

vom3gejh

vom3gejh4#

保持通用路径,我所做的是loop.run_in_executor(None,lambda数据:更新联系人(**数据),{ '电子邮件':电子邮件,“访问令牌”:例如,令牌[“访问令牌”]})
那么我不需要使用任何额外的导入。

相关问题