这是正确的做法.我是一个新手蟒蛇
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()
Run Code Online (Sandbox Code Playgroud)
当我运行这个我得到NameError:名称'自己'没有定义???
变量self(类方法的第一个参数 - 可以使用任何名称)意味着引用类实例(也称为对象).你在没有定义self的地方使用self,就在没有特定对象的类中.
当执行代码queueLock = threading.lock()...等时,您不在类对象(实例)中,而是在类的上下文中,因此您的锁对于类的所有对象都是相同的.
关于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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14695 次 |
| 最近记录: |