从线程中访问全局变量

时间:2013-08-16 11:16:34

标签: python python-multithreading

我有一个带有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类,一旦建立连接,就已经在另一个线程中了。 我想跟踪我的线程,某种统计处理。 但是我无法访问我的变量。 此外,我需要锁定它们,以便它们代表真实的价值,而不是正确的未定义

1 个答案:

答案 0 :(得分: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'))