我试图从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社区的其他成员工作(或中断)?
感谢。
答案 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以后不推荐使用。