将args,wargs传递给run_in_executor

时间:2018-11-19 04:12:40

标签: python python-3.x

我试图像这样将参数传递给gsub("(Mr.|Mrs.)\\s\\w*\\s:\\s", "@", test)

run_in_executor

但是,出现以下错误:

  

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

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

2 个答案:

答案 0 :(得分:4)

使用functools.partial;这是执行此类操作的一种标准方法,在the docs中特别推荐loop.run_in_executor,在the Event Loop docs中更推荐使用此方法。

这就是它的外观:

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

答案 1 :(得分:1)

您要求“通用方式”;最通用的答案是为此目的创建一个函数。如果您要提供的data对于调用方而言是本地的,则可以在调用方内部创建该函数,也许可以将其作为lambda:

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

正如给出的,这与functools.partial的答案并没有太大不同,并且(如文档所述)它可能会减少调试输出的实用性,但是它可以让您执行诸如计算data之类的事情。在执行器上的值,并根据update_contacts的返回值进行操作。