Python 2.7 Python 2.7线程类变量范围
我有一个非常基本的范围问题。在上面的示例中,通过反复试验,似乎所有线程都有someList的作用域。但是self.someVariable的作用域仅限于每个线程。是否有人可以确认这是正确的,或者someList是否应该有一个明确的附加关键字或注释标识符来指示它是一个同步的类变量?self.someVariable是在每个线程的范围内创建的,而someList是在类内创建的。所有WorkerThread对象都应有权访问相同的someList,但每个对象都有一个不同的self.someVariable实例Python 2.7 Python 2.7线程类变量范围,python-2.7,Python 2.7,我有一个非常基本的范围问题。在上面的示例中,通过反复试验,似乎所有线程都有someList的作用域。但是self.someVariable的作用域仅限于每个线程。是否有人可以确认这是正确的,或者someList是否应该有一个明确的附加关键字或注释标识符来指示它是一个同步的类变量?self.someVariable是在每个线程的范围内创建的,而someList是在类内创建的。所有WorkerThread对象都应有权访问相同的someList,但每个对象都有一个不同的self.someVariabl
但是有一点需要注意,像这样读写类变量并不是真正的线程安全的。在处理类变量时,应该使用锁。有关更多信息,请参阅。如果您打算使用多线程,我还建议您阅读有关线程同步的内容。好的,这就是我观察到的,我感谢您的确认。谢谢我也用了一把锁来写东西;因为我无法验证list.append是线程安全的。
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)