锁定所有线程,但在python中锁定一个

时间:2014-10-16 17:42:42

标签: python multithreading locking gil

我有线程起点

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 条件发生时,如果线程被锁定,我需要解锁线程(检查是否需要锁定)

1 个答案:

答案 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