我尝试像这样将参数传递给run_in_executor:
run_in_executor
loop.run_in_executor(None, update_contacts, data={ 'email': email, 'access_token': g.tokens['access_token'] })
但是,我得到了以下错误:run_in_executor()获得意外的关键字参数“data”有没有一种通用的方法来传递参数给这个函数?
noj0wjuj1#
使用functools.partial;这是执行此类操作的标准方法,在loop.run_in_executor的文档中特别推荐,在Event Loop文档中也有更普遍的建议。以下是您可能看到的内容:
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'] }))
如果您愿意,也可以使用from functools import partial。
from functools import partial
eimct9ow2#
你要求的是“通用方式”;最通用的答案是创建一个函数来实现这个目的,如果你想提供的data是调用者本地的,你可以在调用者内部创建这个函数,可能是lambda:
data
loop.run_in_executor(None,lambda: update_contacts(data={ 'email': email, 'access_token': g.tokens['access_token'] })
正如所给出的,这与functools.partial的答案没有太大的不同,而且(正如文档所述)它可能会降低调试输出的实用性,但它允许您在执行器上计算data值,并对update_contacts的返回值进行操作。
update_contacts
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']})
或使用功能工具
vom3gejh4#
保持通用路径,我所做的是loop.run_in_executor(None,lambda数据:更新联系人(**数据),{ '电子邮件':电子邮件,“访问令牌”:例如,令牌[“访问令牌”]})那么我不需要使用任何额外的导入。
4条答案
按热度按时间noj0wjuj1#
使用
functools.partial
;这是执行此类操作的标准方法,在loop.run_in_executor
的文档中特别推荐,在Event Loop文档中也有更普遍的建议。以下是您可能看到的内容:
如果您愿意,也可以使用
from functools import partial
。eimct9ow2#
你要求的是“通用方式”;最通用的答案是创建一个函数来实现这个目的,如果你想提供的
data
是调用者本地的,你可以在调用者内部创建这个函数,可能是lambda:正如所给出的,这与
functools.partial
的答案没有太大的不同,而且(正如文档所述)它可能会降低调试输出的实用性,但它允许您在执行器上计算data
值,并对update_contacts
的返回值进行操作。jckbn6z73#
创建调用它的函数:
或,则func也可以是lambda:
或使用功能工具
vom3gejh4#
保持通用路径,我所做的是loop.run_in_executor(None,lambda数据:更新联系人(**数据),{ '电子邮件':电子邮件,“访问令牌”:例如,令牌[“访问令牌”]})
那么我不需要使用任何额外的导入。