首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把args,kwargs传给run_in_executor

问把args,kwargs传给run_in_executor
EN

Stack Overflow用户
提问于 2018-11-19 04:12:39
回答 3查看 14K关注 0票数 26

我试图像这样向run_in_executor传递参数:

代码语言:javascript
复制
    loop.run_in_executor(None, update_contacts, data={
        'email': email,
        'access_token': g.tokens['access_token']
    })

但是,我得到以下错误:

run_in_executor()得到了一个意外的关键字参数'data‘

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-19 06:16:30

使用functools.partial;这是一种标准的方法来做这样的事情,这是在医生们 for loop.run_in_executor中特别推荐的,在事件循环文档中也是如此。

下面是它对你的看法:

代码语言:javascript
复制
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。

票数 43
EN

Stack Overflow用户

发布于 2018-11-19 06:54:53

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

代码语言:javascript
复制
loop.run_in_executor(None,lambda: update_contacts(data={
  'email': email,
  'access_token': g.tokens['access_token']
})

如前所述,这与functools.partial答案并没有太大不同,而且(正如文档所述),它可能会减少调试输出的效用,但它允许您执行诸如计算执行器上的data值和对来自update_contacts的返回值进行操作之类的操作。

票数 7
EN

Stack Overflow用户

发布于 2022-02-08 16:34:33

创建一个调用它的函数:

代码语言:javascript
复制
def foo():
    update_contacts(data={'email': email,'access_token': g.tokens['access_token']})
loop.run_in_executor(None, foo)

或,功能也可以是lambda:

代码语言:javascript
复制
loop.run_in_executor(None, lambda: update_contacts(data={'email': email,'access_token': g.tokens['access_token']})

或者用他妈的工具

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53368203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档