将args,wargs传递给run_in_executor

6 python python-3.x

我试图传递这样的参数run_in_executor

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

但是,出现以下错误:

run_in_executor()获得了意外的关键字参数“数据”

是否有将args传递给此函数的通用方法?

Cyp*_*ase 6

使用functools.partial; 这是执行此类操作的一种标准方法,特别是在的文档loop.run_in_executor以及在事件循环文档中更建议使用

这是它的外观:

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']
}))
Run Code Online (Sandbox Code Playgroud)

from functools import partial如果愿意,您也可以这样做。


Dav*_*ing 6

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

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

如上所述,这与functools.partial答案没有太大区别,并且(如文档所述)它可能会降低调试输出的效用,但它可以让您执行诸如计算data执行器上的值并根据update_contacts.