Только что начал экспериментировать с асинхронным, который выглядит действительно круто. Я пытаюсь использовать фьючерсы с асинхронная сопрограммы, который работает вечно, но я получаю эту ошибку:Python с использованием фьючерсов с loop_forever
Task exception was never retrieved
future: <Task finished coro=<slow_operation() done, defined at ./asynchio-test3.py:5> exception=InvalidStateError("FINISHED: <Future finished result='This is the future!'>",)>
Это мой код, который работает, как ожидалось, если я удалить 3 строки, связанные с фьючерсами:
import asyncio
@asyncio.coroutine
def slow_operation():
yield from asyncio.sleep(1)
print ("This is the task!")
future.set_result('This is the future!')
asyncio.async(slow_operation())
def got_result(future):
print(future.result())
loop = asyncio.get_event_loop()
future = asyncio.Future()
future.add_done_callback(got_result)
asyncio.async(slow_operation())
try:
loop.run_forever()
finally:
loop.close()
Очень круто. Спасибо. Но теперь я нахожусь на стадии запроса, зачем нам нужны фьючерсы? Могу ли я вызвать регулярную функцию из courotine или именно поэтому future.set_result? необходим? – dpetican
@dpetican, Извините, я не могу ответить на это. Как насчет отправки отдельного вопроса? – falsetru
Короткий ответ: это зависит от того, нужна ли вам функция для асинхронности. – dirn