我有线程起点
for _ in xrange(THREADS_COUNT):
global thread_
thread_ = threading.Thread(target=self.mainWork, args=(mainProject,victims))
thread_.start()
time.sleep(5)
我需要在 if 发生时锁定所有线程,但只有一个(如果发生的话)。
if 'di_unread_inbox' in inbox_page:
...
当 else 条件发生时,如果线程被锁定,我需要解锁线程(检查是否需要锁定)
答案 0 :(得分:3)
您需要在检查if
条件之前获取锁定,然后在您更新共享资源之后释放它,或者2)确定资源不需要更新,以及另一个逻辑应该使用分支。这个逻辑看起来像这样:
lock = threading.Lock()
def mainWork():
# do stuff here
lock.acquire()
if 'di_unread_inbox' in inbox_page:
try:
# something in here changes inbox_page so that 'di_unread_inbox' isn't there anymore
inboxmessagelabel.set("some label")
finally:
lock.release()
else:
lock.release()
# do other stuff
如果您不需要else
块,逻辑看起来会更简单:
def mainWork():
# do stuff here
with lock:
if 'di_unread_inbox' in inbox_page:
inboxmessagelabel.set("some label")
# do other stuff