这是正确的做法吗。我是 python 新手
class main(threading.Thread):
queueLock = threading.Lock()
EppQueue = Queue.Queue(1)
CrQueue = Queue.Queue(1)
EPP = threading.Thread(name='EPP', target=EPP, args=(0,EppQueue,))
cr = threading.Thread(name='cr', target=CR, args=(0,CrQueue,))
EPP.setDaemon(True)
EPP.start()
Cr.start()
self.send_queue("EppQueue","sss")
self.send_queue("CrQueue","ssds")
def send_queue(self,queuename,qvalue,b=None):
if b is None:
b = self.queuename
self.queueLock.acquire()
self.b.put(qvalue)
self.queueLock.release()
当我运行它时我得到 NameError: name 'self' is not defined ???
最佳答案
变量 self
(类方法的第一个参数 - 你可以为它使用任何名称)是指类实例(也称为对象).您在未定义 self 的地方使用 self,就在尚不知道特定对象的类中。
当执行代码 queueLock = threading.lock() ... 等时,您不在类对象(实例)中,而是在类的上下文中,因此您的锁对于类的所有对象都是相同的类(class)。
关于send_queue
,它通过类定义并为所有对象所知,因此您无需使用self.
来访问它。
如果您希望在创建实例时执行某些代码,请将其放入 __init__
。
class main(threading.Thread):
def __init__(self):
self.queueLock = threading.Lock()
.. some code ...
send_queue("EppQueue","sss")
send_queue("CrQueue","ssds")
关于python - 名称错误 : name 'self' is not defined - when trying to post values to different queues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645775/