ensure_future在模块asyncio中不可用

时间:2015-06-15 20:39:29

标签: python python-asyncio

我试图从python asyncio tasks & coroutines documentation

运行此示例
import asyncio

@asyncio.coroutine
def slow_operation(future):
    yield from asyncio.sleep(1)
    future.set_result('Future is done!')

def got_result(future):
    print(future.result())
    loop.stop()

loop = asyncio.get_event_loop()
future = asyncio.Future()
asyncio.ensure_future(slow_operation(future))
future.add_done_callback(got_result)
try:
    loop.run_forever()
finally:
    loop.close()

然而,我收到此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'ensure_future'

这条线似乎让我感到悲伤:

asyncio.ensure_future(slow_operation(future))

我的python解释器在OSX Yosemite上是3.4.3,我上面链接的文档版本也是如此,我复制了这个例子,所以我不应该得到这个错误。这是我的python解释器的终端抓取:

Python 3.4.3 (default, Feb 25 2015, 21:28:45) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

来自不引用asyncio.ensure_future的网页的其他示例似乎有效。

我尝试开设一个全新的口译员会话并从ensure_future

导入asyncio
from asyncio import ensure_future

我收到导入错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'ensure_future'

我可以访问另一台安装了python 3.4.0的运行Ubuntu 14.04的机器。我在那里尝试了相同的导入,不幸的是遇到了相同的导入错误。

asyncio的api是否已被更改,并且它没有在文档示例中反映出来,或者可能存在拼写错误并且ensure_function应该是文档中的其他内容?

该示例是否为SO社区的其他成员工作(或中断)?

感谢。

1 个答案:

答案 0 :(得分:13)

https://docs.python.org/3.4/library/asyncio-task.html#asyncio.ensure_future

  

asyncio.ensure_future(coro_or_future, *, loop=None)

     

安排协程对象的执行:将来包装它。返回一个Task对象。

     

如果参数是Future,则直接返回。

     

版本3.4.4中的新内容。

这就是“Who is to blame?”。关于“What is to be done?”:

  

asyncio.async(coro_or_future, *, loop=None)

     

ensure_future().

的弃用别名      

自版本3.4.4以后不推荐使用。