обеспечить будущее недоступно в модуле asyncio
Я пытаюсь запустить этот пример от python asyncio задачи & coroutines документация
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 - 3.4.3 на OSX Yosemite, как и версия документации, с которой я связан выше, из которой я скопировал пример, поэтому я не стоит получите эту errror. Вот терминал-захват моего интерпретатора 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'
у меня есть доступ к другой машине под управлением Ubuntu 14.04 с установленным python 3.4.0. Я попробовал тот же импорт там, и, к сожалению, столкнулся с той же ошибкой импорта.
имеет api для asyncio был изменен, и его просто не отражено в примерах документации, или, может быть, есть опечатка и ensure_function действительно должно быть что-то еще в документации?
работает ли пример (или прерывается) для других членов сообщества SO?
спасибо.
1 ответов
https://docs.python.org/3.4/library/asyncio-task.html#asyncio.ensure_future
asyncio.ensure_future(coro_or_future, *, loop=None)
запланируйте выполнение объекта coroutine: оберните его в будущем. Возвращает объект задачи.
если аргумент
Future
, он возвращается напрямую.новое в версии 3.4.4.
вот и все для "кто виноват?". И о "что делать?":
asyncio.async(coro_or_future, *, loop=None)
устаревший псевдоним
ensure_future().
устаревшим, начиная с версии 3.4.4.