创建一个线程本地的成员变量

时间:2016-04-01 12:02:36

标签: python multithreading

我有一个服务器类,可以在客户端连接时创建线程。当客户端线程被启动时,它只是监听套接字并在套接字接收数据时调用OnData方法。这应该是一个基本的TCP服务器类,不同的类将来可以继承。子类只需要覆盖OnData方法。

我的问题是如何创建一个线程本地的成员变量?我希望每个线程都有自己的状态。

2 个答案:

答案 0 :(得分:1)

让每个主题成为您的' ClientThread'的新实例。类。

这样,每个线程都有自己的成员变量,任何其他线程都无法访问它们。

E.g。

class ServerClass():
    def make_new_thread(self, state):
        new_thread = ClientThread(state)
        new_thread.start()

class ClientThread(Thread):
    local_state = None

    def __init__(self, state):
        self.local_state = state

    def run(self):
        do_some_stuff()

然后,您可以创建ServerClass实例化在运行时传入的内容的类。

答案 1 :(得分:0)

您可以将ID传递给每个帖子并从那里开始:

class foo(object):
    def __init__(self, _id):
        self._id = _id
        setattr(self, '_foo_%s' % str(_id), {'your': 'state'})

现在每个对象都有一个唯一的字段(如果ID是唯一的):

>>> f1 = foo(1)
>>> f1._foo_1
{'your': 'state'}
>>> f1._foo_2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'foo' object has no attribute '_foo_2'

这有帮助吗?