이 글은 Python 스레드에서 조건 변수의 사용에 대한 내용을 제공합니다. 특정 참조 값이 있으므로 도움이 필요한 친구에게 도움이 되길 바랍니다.
조건 변수는 다른 잠금에 구축된 동기화 기본 요소입니다. 이 잠금은 스레드가 특정 상태 변경이나 이벤트에 주의를 기울여야 할 때 사용됩니다. 일반적인 사용법은 한 스레드에서 생성된 데이터가 다른 스레드에 제공되는 생산자 및 소비자 문제입니다.
c=Condition(lock) 穿件新的条件变量。lock时可选的Lock或RLock的实例。如果未提供lock参数,就会创建新的RLock实例供条件变量使用。
c.acquire(*args):获取底层锁。此方法将调用底层锁上对应的acquire(*args)方法。 c.release():释放底层锁。此方法将调用底层锁上对应的release()方法 c.wait(timeout):等待直到获取通知或出现超时为止。此方法在调用线程已经获取锁之后调用。 调用时,将释放底层锁,而且线程将进入睡眠状态,直到另一个线程在条件变量上执行notify()或notify_all()方法将其唤醒为止。 在线程被唤醒后,线程讲重新获取锁,方法也会返回。timeout是浮点数,单位为秒。 如果超时,线程将被唤醒,重新获取锁,而控制将被返回。 c.notify(n):唤醒一个或多个等待此条件变量的线程。此方法只会在调用线程已经获取锁之后调用, 而且如果没有正在等待的线程,它就什么也不做。 n指定要唤醒的线程数量,默认为1.被唤醒的线程在它们重新获取锁之前不会从wait()调用返回。 c.notify_all():唤醒所有等待此条件的线程。
#条件变量实例 from threading import Condition c=Condition() def producer(): while True: c.acquire() #生产东西 ... c.notify() c.release() def consumer(): while True: c.acquire() while 没有可用的东西: c.wait()#等待出现 c.release() #使用生产的东西 ...
참고: 존재하는 경우 여러 스레드가 동일한 조건을 기다리고 있으며, inform() 작업은 스레드 중 하나 이상을 깨울 것입니다(이 동작은 기본 운영 체제에 따라 다름). 따라서 스레드가 깨어난 후에는 자신이 기다리고 있던 조건이 더 이상 존재하지 않는다는 것을 발견할 가능성이 항상 있습니다. 이는 스레드가 깨어났지만 생성된 항목이 있는 경우 소비자 함수에서 while 루프가 사용되는 이유를 설명합니다. 사라지면 다시 돌아가서 다음 신호를 기다립니다.
관련 추천:
# 🎜🎜 #Python 멀티스레딩의 변수 문제에 대한 간략한 분석
위 내용은 Python 스레드에서 조건 변수를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!