0

我有一个使用 Pyramid 框架构建的 Web 应用程序。我想添加连接到 SOAP API 的功能。为此,我已经成功地使用了 suds 库。

在使用 suds 时,我首先创建一个客户端,如下所示:

from suds.client import Client
client = Client(wsdl_url)

现在,对于我的 Web 应用程序的每个用户,我将维护一个不同的身份验证令牌,我将在每次调用 SOAP API 时将其传递。我想避免做的是每次我需要访问 API 时都重新构建 suds 客户端。

有时,我的 Web 应用程序的前端会向我的服务器发出十几个几乎同时的 ajax 请求,我需要将这些请求传递给 API。

我想在服务器重新启动时构建一次客户端,而不是每次需要进行 API 调用时都重新构建它。不断地重新解析 XML 只是为了一遍又一遍地构建相同的 suds 客户端对象,这对我来说似乎是一种浪费。

4

1 回答 1

1

那么任何全局的问题是它是否是线程安全的。如果是,您可以简单地将其存储在注册表中并允许所有人访问它:

config.registry['wsdl_client'] = Client(wsdl_url)

def some_view(request):
    client = request.registry['wsdl_client']

但是,如果这是不能立即在线程之间共享的东西,您将不得不为每个请求创建一个新对象,正如您所抱怨的那样,或者使用 threadlocal 为每个线程存储一个新实例。需要注意的是在请求之间共享对象时正确处理对象的设置/拆卸。例如,当 Pyramid 中通常使用 threadlocal 对象时,它们需要在请求结束时通过request.add_finished_callback(). 抱歉,我无法具体评论泡沫,但这些是您的基本选择。

于 2013-03-10T01:40:52.627 回答