Асинхронный prompt_toolkit для пользовательского ввода в витой

Я пытаюсь написать простой клиент командной строки в качестве оболочки для системы клиент-сервер TCP. Клиент написан на Python с использованием twisted фреймворк. Я использую Python3.6 в качестве интерпретатора. я нашел это prompt_toolkit имеет asyncio реализации и попытался использовать пример кода, чтобы соединить его в витую систему, используя ensureDeferred, К сожалению, код выдает исключение, как только отображается приглашение.

Я новичок в использовании инструментов библиотеки asyncio в python, поэтому я не уверен, что что-то упустил. Код, который я попытался запустить, выглядит следующим образом:

from twisted.internet import reactor
from twisted.internet.defer import ensureDeferred
from prompt_toolkit import prompt_async


async def my_coroutine():
    while True:
        result = await prompt_async('Say something: ', patch_stdout=True)
        print('You said: %s' % result)


d = ensureDeferred(my_coroutine())
reactor.run()

Исключением является следующее:

 AssertionError: yield from wasn't used with future

Я не уверен, является ли это принципиальной несовместимостью между Twisted и Asyncio, или мне не хватает ключевого способа соединения этих двух систем. Буду очень признателен за любые советы.

Сведения о версии:

twisted == 17.9.0
prompt_toolkit == 1.0.15

1 ответ

Первое, что вам нужно сделать, это установить asyncioreactor так что родной цикл событий Twisted работает параллельно с asyncio цикл событий.

import twisted.internet.asyncioreactor
twisted.internet.asyncioreactor.install()
# add your imports + code here

Я не уверен, насколько готов asyncioreactor для производственного использования, что может быть причиной того, что не так много с точки зрения документации.

Ресурсы

Другие вопросы по тегам