0

Pyramidフレームワークを使用して構築されたWebアプリがあります。SOAPAPIに接続する機能を追加したいと思います。このために、私はsudsライブラリを正常に使用することができました。

sudsを使用する場合、最初に次のようにクライアントを作成します。

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

これで、Webアプリのユーザーごとに、SOAPAPIへの呼び出しごとに渡す異なる認証トークンを維持します。私が避けたいのは、APIをヒットする必要があるたびにsudsクライアントを再構築することです。

Webアプリのフロントエンドが、サーバーに対してほぼ同時に12個のajaxリクエストを送信することがあります。これは、APIに渡す必要があります。

API呼び出しを行う必要があるたびにクライアントを再構築するのではなく、サーバーが再起動されたときに一度クライアントを構築したいと思います。同じsudsクライアントオブジェクトを何度も構築し続けるためだけにXMLを継続的に再解析することは、私には無駄のように思えます。

4

1 に答える 1

1

グローバルな問題は、スレッドセーフかどうかです。そうである場合は、レジストリに保存して、全員がアクセスできるようにすることができます。

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

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

ただし、これがスレッド間ですぐに共有できないものである場合は、不満を言っているようにリクエストごとに新しいオブジェクトを作成するか、threadlocalを使用してスレッドごとに新しいインスタンスを保存する必要があります。注意すべきことは、リクエスト間でオブジェクトを共有するときに、オブジェクトのセットアップ/ティアダウンを適切に処理することです。たとえば、スレッドローカルオブジェクトが通常Pyramidで使用される場合、リクエストの最後にを介してクリーンアップする必要がありますrequest.add_finished_callback()。申し訳ありませんが、泡について具体的にコメントすることはできませんが、これらはあなたの基本的なオプションです。

于 2013-03-10T01:40:52.627 に答える