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 回答