Что я хочу сделать, это в консоли Python :
- Создать будущее asyncio
- Присоединить обратный вызов к этому будущему
- Установите будущее значение (и, следовательно, получите результат обратного вызова)
Чтобы сделать это, я попытался это сделать, в консоли Python :
from threading import Thread
import asyncio
def start_loop(loop):
asyncio.set_event_loop(loop)
loop.run_forever()
new_loop = asyncio.new_event_loop()
t = Thread(target=start_loop, args=(new_loop,))
t.start()
fut = new_loop.create_future()
fut.add_done_callback(lambda _: print("Hey"))
fut.set_result(True)
Я ожидаю, что "Эй" будет напечатан, но на самом деле я ничего не получаю.
Дополнительная информация:
Когда я делаю:
import asyncio
loop = asyncio.get_event_loop()
fut = loop.create_future()
fut.add_done_callback(lambda x: print("Hey"))
fut.set_result(True)
loop.run_forever()
Я получил ожидаемый результат, но мне пришлось позвонить run_forever
, когда будущее уже установлено.
Мои вопросы:
- Почему мой первый блок кода не выполняет работу, как ожидалось?
- Существует ли гипотетический синтаксис, подобный следующему?
import asyncio
loop = asyncio.get_event_loop()
fut = loop.create_future()
# Hypothetical part
loop.run_forever_in_background()
# End of hypothetical part
fut.add_done_callback(lambda x: print("Hey"))
fut.set_result(True)
Моя цель высокого уровня - играть сФьючерсы и Asyncio непосредственно в консоли , чтобы лучше понять это.