BaseEventLoop.run_in_executor()从Python 3.5开始抛出“意外的关键字参数'回调'”

时间:2015-09-30 19:17:44

标签: python python-asyncio python-3.5

我正在通过默认的provision_ec2_node()事件循环thread executor运行一个函数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 release notes concerning asyncio,我没有看到任何解释这种行为变化的内容。此外,3.5文档still say functools.partial()是将带关键字的函数传递给执行者的正确方法。

是什么给出了?

1 个答案:

答案 0 :(得分:4)

显然第二个参数是callbackfunctask = loop.run_in_executor(None, functools.partial(...)) ,但更改没有反映在文档中更改反映在文档中2015年10月1日。这就是它失败的原因。

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

public String qty (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)
{