扭曲的服务器 - 客户端互连XML-RPC和REST服务

时间:2012-06-21 00:21:11

标签: python twisted xml-rpc python-requests

我有一个由REST API提供的服务,其中一个Python库使用python-requests包装它。

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

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

所以,我决定在这个中间层使用twisted.web.xmlrpc,并使用基于请求的lib进行远程调用,它工作正常。我想我偶尔会阻止扭曲的主循环几秒钟,但这不是什么大问题。

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

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

1 个答案:

答案 0 :(得分:1)

如果您喜欢请求的API风格,但想要使用适合Twisted的内容,请考虑使用treq。有support libraries用于编写接口,可以是同步的,也可以是异步的,具体取决于调用者的需求。

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

但是,最终,让 - 保罗的评论是正确的;如果你想改变它的工作方式,你将需要对这段代码的工作方式做一些改变。