我试图像这样向run_in_executor传递参数:
loop.run_in_executor(None, update_contacts, data={
'email': email,
'access_token': g.tokens['access_token']
})但是,我得到以下错误:
run_in_executor()得到了一个意外的关键字参数'data‘
是否有一种将args传递给此函数的通用方法?
发布于 2018-11-19 06:16:30
使用functools.partial;这是一种标准的方法来做这样的事情,这是在医生们 for 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']
}))如果你愿意的话,你也可以做from functools import partial。
发布于 2018-11-19 06:54:53
您要求一种“泛型方式”;最通用的回答是为此目的创建一个函数。如果要提供的data是调用方的本地函数,则可以在调用方内部创建该函数,可能是作为lambda:
loop.run_in_executor(None,lambda: update_contacts(data={
'email': email,
'access_token': g.tokens['access_token']
})如前所述,这与functools.partial答案并没有太大不同,而且(正如文档所述),它可能会减少调试输出的效用,但它允许您执行诸如计算执行器上的data值和对来自update_contacts的返回值进行操作之类的操作。
发布于 2022-02-08 16:34:33
创建一个调用它的函数:
def foo():
update_contacts(data={'email': email,'access_token': g.tokens['access_token']})
loop.run_in_executor(None, foo)或,功能也可以是lambda:
loop.run_in_executor(None, lambda: update_contacts(data={'email': email,'access_token': g.tokens['access_token']})或者用他妈的工具
https://stackoverflow.com/questions/53368203
复制相似问题