2

我正在provision_ec2_node()通过默认的asyncio事件循环线程执行器运行一个函数。该函数接受一些我通过传递给执行程序的参数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 发行说明asyncio,我没有看到任何解释这种行为变化的内容。此外,3.5 文档仍然说functools.partial()是将带有关键字的函数传递给执行程序的正确方法。

是什么赋予了?

4

1 回答 1

4

显然,第二个参数从to重命名但更改未反映在文档中,更改反映在 2015 年 10 月 1 日的文档中。这就是它失败的原因。callbackfunc

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

task = loop.run_in_executor(None, functools.partial(...))
于 2015-09-30T19:43:33.287 回答