python - Twisted 服务器-客户端互连 XML-RPC 和 REST 服务

标签 python twisted xml-rpc python-requests

我有一个由 REST API 提供的服务,并有一个使用 python 请求包装它的 Python 库。

我有一个由第三方(不是 Python)设计的“哑”用户界面,用于连接到本地 XML-RPC。

现在我必须连接两端并将 XML-RPC 调用转发到 REST API 并返回结果。它主要是异步的,不依赖于实时返回给用户的结果。大多数 XML-RPC 调用应该立即返回,将任务排队,而其他一些调用将稍后查询结果。数据在需要时存储在 sqlite 数据库中。

因此,我决定对这个中间层使用twisted.web.xmlrpc,并使用基于请求的库进行远程调用,它工作得很好。我想我偶尔会阻塞twisted的主循环几秒钟,但这不是什么大问题。

问题是我还必须从这个中间层将一些大文件上传到提供 REST API 的 HTTP 服务器。我无法使用基于请求的库进行这些上传,因为它将阻止扭曲循环,直到上传完成。

我宁愿不使用多线程,而且我真的不想重写我作为一个扭曲的客户端的基于 python 请求的库。有什么方法可以将请求集成到twisted的主循环中,或者任何其他合理的解决方案吗?

最佳答案

如果您喜欢 requests 的 API 风格,但想要一些可以与 Twisted 配合使用的东西,请考虑使用 treq 。有support libraries用于根据调用者的需要编写同步或异步接口(interface)。

如果您确实想使用请求,但又不想阻塞主循环,则可以使用 twisted.internet.threads.deferToThread 调用它。这基本上是透明的,如果您的请求不共享任何状态,您几乎可以忽略您正在使用多线程的事实。

但是,最终,让-保罗的评论是正确的;如果您想更改此代码的工作方式,则需要对其工作方式进行一些更改。

关于python - Twisted 服务器-客户端互连 XML-RPC 和 REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129978/

相关文章:

python - python的 `in`函数在通过 `__getitem__()`'触发时是如何工作的?

python - python源代码的入口点是什么

python - 在扭曲中使用 react 器不断扫描数据库表时出现以下错误

python - wp.​​uploadFile xmlrpc 来自 python 编码 base64

python - 如何删除列表中每个列表中的最后一个元素

python - 将 16 位灰度转换为 QImage

python - Django - 将文件名列表呈现给模板

python - twisted - 获取操作系统选择的监听端口

python - 如何通过 xmlrpc (python) 传输二进制数据?

python - 是否有任何好的 Python 教程/指南将 XML-RPC 与 Last.fm API 一起使用?