Python 2.7线程类变量范围

时间:2016-02-15 04:40:04

标签: python-2.7

class WorkerThread(threading.Thread):
    someList = []

    __init__(self, someVariable):
       self.someVariable = someVariable

    __start__(self, queue):
        while True:
            id = queue.get()
            self.doWork(id)
            queue.task_done()

     doWork(self, id):
         result = do_some_slow_operation(id)
         lock = Thread.Lock()
         with lock:
             self.someList.append(result)

我有一个非常基本的范围问题。在上面的例子中,通过试验和错误,似乎所有线程都具有someList的范围。但是self.someVariable的范围仅限于每个线程。有人可以确认这是正确的,或者someList是否应该有一个明确的附加关键字或注释标识符来表明它是一个同步的类变量?

1 个答案:

答案 0 :(得分:0)

self.someVariable是在每个线程的范围内创建的,而someList是在类中创建的。所有WorkerThread对象都应该可以访问相同的someList,但每个对象都有一个不同的self.someVariable实例。

但是有一些问题,读取和写入类似这样的类变量并不是真正的线程安全。使用类变量时应该使用锁。有关详细信息,请参阅this thread。如果您打算使用多线程,我还建议您阅读线程同步。