自定义线程python上的线程锁
有人能告诉我,在python中,我可以把锁放在自定义线程中的什么地方吗自定义线程python上的线程锁,python,Python,有人能告诉我,在python中,我可以把锁放在自定义线程中的什么地方吗 import threading lock = threading.Lock() class WorkerThread(threading.Thread): def __init__(self,lock): super(WorkerThread,self).__init__() self.lock = lock def run(self): self.lock
import threading
lock = threading.Lock()
class WorkerThread(threading.Thread):
def __init__(self,lock):
super(WorkerThread,self).__init__()
self.lock = lock
def run(self):
self.lock.acquire()
print "Hello World"
self.lock.release()
worker = WorkerThread(lock)
错误回溯:
Traceback (most recent call last):
File "<buffer>", line 14, in <module>
File "<buffer>", line 11, in __init__
AssertionError: release() of un-acquire()d lock
回溯(最近一次呼叫最后一次):
文件“”,第14行,在
文件“”,第11行,在_init中__
AssertionError:un-acquire()d锁的释放()
您混合了制表符和空格。run
的大部分定义实际上嵌套在\uuuuu init\uuuuu
内部,而self.lock.release()
实际上位于run
外部和内部。您的线程最终尝试在创建线程时释放未锁定的锁
不要混合使用制表符和空格。坚持使用空格。在编辑器中启用“显示空白”以使问题更为明显,如果编辑器无法做到这一点,请使用更好的编辑器。运行带有-tt
标志的Python也有助于捕获这些错误。通过将锁用作上下文管理器,您可以使您的生活更加轻松(在一般情况下更安全)。您可以用self.lock:
替换acquire和release,在获取锁时运行该块下缩进的所有内容,并在块结束时释放。