0

httpHandler クラスの python ファイルがあります。次のように ThreadingMixIn で使用します。

from SocketServer import ThreadingMixIn
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
Successful_Attempts = 0
Failed_Attempts = 0

class httpHandler(BaseHTTPRequestHandler):

    def do_POST(self):
        .....


class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
    pass

その後、次のように開始します。

server = ThreadingHTTPServer(('localhost', PORT_NUMBER), httpHandler)
        print 'Started httpserver on port ' , PORT_NUMBER

私が理解しているように、httpHandlerクラスは、接続が確立されると、すでに別のスレッドにあります。私は自分のスレッド、ある種の統計処理を追跡したいと考えています。ただし、変数にアクセスできません。また、正しく定義されていないものではなく、実際の値を表すように、それらをロックする必要があります

4

1 に答える 1

1

そのためにスレッドセーフなシングルトンを使用します。

編集: johnthexiii は、簡単な例を投稿する必要があることを提案したので、ここにあります。正確にはシングルトンではありませんが、クラス変数はアプリケーションごとにグローバルであるため、シングルトン クラスをインスタンス化する代わりに、クラスを直接操作してそのクラス メソッドを呼び出します。

from threading import Lock


class ThreadSafeGlobalDataContainer:
    __container = {}
    __lock = Lock()

    @classmethod
    def set(cls, name, value):
        with cls.__lock:
            cls.__container[name] = value

    @classmethod
    def get(cls, name):
        with cls.__lock:
            return cls.__container[name]


#in some thread
ThreadSafeGlobalDataContainer.set('someName', 'someValue')

#somewhere else
print(ThreadSafeGlobalDataContainer.get('someName'))
于 2013-08-16T11:50:36.140 に答える