Próbuję uruchomić ten przykład z python asyncio tasks & coroutines documentationnie ensure_future dostępne w module asyncio
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()
Jednak uzyskać ten błąd:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'ensure_future'
Jest to linia, która wydaje się być przyczyną ja żal:
asyncio.ensure_future(slow_operation(future))
Mój interpreter python jest 3.4.3 na OS X Yosemite, jak jest ve dokumentację, do której dołączyłem powyżej, z której skopiowałem przykład, więc nie powinien odbierać tego błędu w postaci. Oto terminal-grab mojego interpreter Pythona:
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.
Inne przykłady ze strony nie odwołującego asyncio.ensure_future
wydają się działać.
Próbowałem otwierając nową sesję interpretera i importowanie ensure_future
z asyncio
from asyncio import ensure_future
pojawia się błąd importowania:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'ensure_future'
Mam dostęp do innego komputera z systemem Ubuntu 14.04 z Python 3.4.0 zainstalowany. Próbowałem tego samego importu i niestety napotkałem ten sam błąd importu.
Czy api dla asyncio zostało zmienione, a nie zostało to po prostu odzwierciedlone w przykładach dokumentacji, a może jest literówka, a funkcja sure_function powinna być czymś innym w dokumentacji?
Czy przykład działa (lub łamie) dla innych członków społeczności SO?
Dzięki.
«Mój jest interpreter Pythona 3.4.3 na OSX Yosemite, jak jest wersja dokumentacji I połączone powyżej» - jak już wiecie, to nie jest poprawna. Dokumenty są [ciągle aktualizowane] (https://mail.python.org/pipermail/python-list/2015-June/692446.html), więc niestety czasami oznacza to, że nowe metody są wprowadzane w dokumentach przed ich wydaniem . –
Dzięki! to właśnie wskazano w zaakceptowanej odpowiedzi. Zwykle api biblioteki standardowej Pythona nie zmienia się wraz z niewielkimi uaktualnieniami wersji, ale asyncio jest tymczasowo w standardowej bibliotece. Powinienem to sobie uświadomić wcześniej. –
@haleemur Ali możesz pomóc w tym? http://stackoverflow.com/q/38531354/6626256 – Omar