2017-02-10 4 views
-1

Может кто-нибудь сказать мне, где я могу поместить блокировку в пользовательский поток в python?thread Lock on Custom Thread 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 Ошибка:

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

Вы можете сделать свою жизнь проще и безопаснее в общем случае с помощью блокировки в качестве менеджера контекста. Вы можете заменить приобретать и выпускать с помощью 'self.kk:' и все отступы под этим блоком выполняются, пока блокировка будет получена, и она будет выпущена, когда заканчивается блок. –

ответ

1

Вы имеете смешанные вкладки и пробелы. Большая часть определения run фактически находится внутри __init__, а self.lock.release() фактически находится вне run и внутри __init__. Ваша нить заканчивается попыткой освободить блокировку блокировки при создании потока.

Не смешивайте язычки и пробелы. Придерживайтесь пробелов. Включите «show whitespace» в вашем редакторе, чтобы сделать проблему более заметной и получить лучший редактор, если ваш редактор не сможет этого сделать. Запуск Python с флагом -tt также поможет поймать эти ошибки.