Python 스레드에서 조건 변수를 사용하는 방법

不言
풀어 주다: 2018-09-11 16:03:59
원래의
2201명이 탐색했습니다.

이 글은 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 루프가 사용되는 이유를 설명합니다. 사라지면 다시 돌아가서 다음 신호를 기다립니다.

관련 추천:

10 조건 변수 및 스레드에 대한 추천 기사

# 🎜🎜 #Python 멀티스레딩의 변수 문제에 대한 간략한 분석

위 내용은 Python 스레드에서 조건 변수를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿