1

Python ladon パッケージと SOAP を使用して Web サービスを公開しています。2 つのメソッド呼び出しの間の状態を覚えておきたいです。コード例は次のとおりです。

from ladon.ladonizer import ladonize
import logging

class Sum(object):
    sum = 0
    FORMAT = '%(name)s %(asctime)s %(levelname)s %(message)s'
    logging.basicConfig(filename='/path/to/my/dir/Sum.log', level=logging.DEBUG, format=FORMAT)
    logger = logging.getLogger('Sum')
    logger.debug("Starting")

    @ladonize(int,rtype=int)
    def Add(self, num):
        Sum.logger.debug("Adding " + str(num))
        Sum.sum += num
        Sum.logger.debug("sum is now " + str(Sum.sum))
        return Sum.sum

クラス合計変数に追加する必要がある整数パラメーターを使用してメソッド Add を呼び出すことをお勧めします。sum は (インスタンス変数とは対照的に) クラス変数であるため、サーバーまたはアプリケーションによってコードがリロードされない限り、状態は保持されます。ログ結果は次のとおりです。

Sum 2013-07-09 15:12:34,303 DEBUG Starting
Sum 2013-07-09 15:12:34,311 DEBUG Adding 5
Sum 2013-07-09 15:12:34,311 DEBUG sum is now 5
Sum 2013-07-09 15:12:36,169 DEBUG Adding 5
Sum 2013-07-09 15:12:36,169 DEBUG sum is now 10
Sum 2013-07-09 15:12:39,404 DEBUG Adding 5
Sum 2013-07-09 15:12:39,405 DEBUG sum is now 15
Sum 2013-07-09 15:12:46,734 DEBUG Starting
Sum 2013-07-09 15:12:46,742 DEBUG Adding 5
Sum 2013-07-09 15:12:46,743 DEBUG sum is now 5

ログでわかるように、Add メソッドを 3 回連続して呼び出すと機能しますが、15:12:46 にアプリケーションがクラス Sum オブジェクトを再作成し、合計が 0 にリセットされます。アプリケーション (またはサーバー) によってクラスがリロードされるのを防ぐにはどうすればよいですか? ladon フレームワークを使用した 2 つのメソッド呼び出しの間の var の状態を記憶する方法はありますか? データベースの使用は避けたいと思います。

4

2 に答える 2

0

合計値をファイルに保存することはできますが、その場合、すべてのリクエストで同じベース値がインクリメントされます。もう 1 つの方法は、セッションのようなビーカーを使用することです。すべてのリクエスタは、session_id と追加する番号を送信します。Web サービスは、session_id と対応する合計を返します。

良い1日を。ガブリエル

于 2013-07-09T14:30:33.100 に答える