0

我正在尝试编写一个简单的命令行客户端作为 TCP 客户端/服务器系统的包装器。twisted客户端是使用框架用python编写的。我使用 Python3.6 作为解释器。我发现它prompt_toolkit有一个asyncio实现,并尝试使用示例代码将其连接到使用ensureDeferred. 不幸的是,一旦显示提示,代码就会引发异常。

我是在 python 中使用 asyncio 库工具的新手,所以我不确定我是否遗漏了一些东西。我尝试运行的代码如下:

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
4

1 回答 1

0

你要做的第一件事是安装asyncioreactorTwisted 的原生事件循环与asyncio事件循环并行工作。

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

我不确定asyncioreactor它对生产使用的准备程度如何,这可能是文档方面没有太多的原因。

资源

于 2018-01-25T21:51:38.903 回答