Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义线程python上的线程锁_Python - Fatal编程技术网

自定义线程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

有人能告诉我,在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
回溯(最近一次呼叫最后一次):
文件“”,第14行,在
文件“”,第11行,在_init中__
AssertionError:un-acquire()d锁的释放()

您混合了制表符和空格。
run
的大部分定义实际上嵌套在
\uuuuu init\uuuuu
内部,而
self.lock.release()
实际上位于
run
外部和
内部。您的线程最终尝试在创建线程时释放未锁定的锁


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

通过将锁用作上下文管理器,您可以使您的生活更加轻松(在一般情况下更安全)。您可以用self.lock:
替换acquire和release,在获取锁时运行该块下缩进的所有内容,并在块结束时释放。