BaseEventLoop.run_in_executor() 从 Python 3.5 开始抛出 "unexpected keyword argument 'callback'"

BaseEventLoop.run_in_executor() throws "unexpected keyword argument 'callback'" starting in Python 3.5

我是 运行 一个函数,provision_ec2_node(),通过默认的 asyncio 事件循环 thread executor。该函数采用一些参数,我通过 functools.partial().

传递给执行程序
task = loop.run_in_executor(
    executor=None,
    callback=functools.partial(
        provision_ec2_node,
        modules=modules,
        host=instance.ip_address,
        identity_file=identity_file,
        cluster_info=cluster_info))

此代码在 Python 3.4 上运行良好,我已经这样使用了几个月。

但是,我最近升级到Python 3.5,现在上面的代码抛出这个错误:

TypeError: run_in_executor() got an unexpected keyword argument 'callback'

查看 Python 3.5 release notes concerning asyncio, I don't see anything which explains this change of behavior. Furthermore, the 3.5 docs still say functools.partial() 是将带有关键字的函数传递给执行程序的正确方法。

什么给了?

显然第二个参数是 renamedcallbackfunc但是文档中没有反映变化 反映了变化在 2015-10-01 的文档中。这就是它失败的原因。

将其更新为新名称(并失去 Python <3.5 兼容性)或将参数作为位置参数传递:

task = loop.run_in_executor(None, functools.partial(...))