Асинхронный 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
для производственного использования, что может быть причиной того, что не так много с точки зрения документации.