2017-02-10 141 views
-1

有人能告诉我在哪里可以把锁定在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.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 
+1

你可以让你的生活使用锁作为一个上下文管理器触摸更容易(和安全一般情况下)。你可以用'with self.lock:'替换acquire和release,并且在获取锁的同时运行该块下面的所有内容,并在块结束时释放它。 –

回答

1

您已经混合制表符和空格。大多数run定义实际上是嵌套在__init__self.lock.release()实际上是外run和内部__init__。您的线程最终尝试释放线程创建时解锁的锁。

不要混合使用制表符和空格。坚持空间。在编辑器中打开“显示空白”以使问题更加明显,如果编辑无法做到这一点,可以获得更好的编辑器。使用-tt标志运行Python也可以帮助捕获这些错误。