다음 글에서는 파이썬에서 세마포어(Semaphore)가 무엇인지 알아보겠습니다. Python 세마포와 Python 프로그래밍에서 세마포가 수행할 수 있는 역할에 대해 알아보세요.
세마포어(Semaphore)
뮤텍스는 하나의 스레드만 동시에 데이터를 변경할 수 있는 반면, 세마포어는 특정 수의 스레드가 동시에 데이터를 변경할 수 있도록 허용합니다. 화장실에는 최대 3명만 갈 수 있습니다. 뒤쪽에 있는 사람들은 안에 있는 사람이 나올 때까지만 기다렸다가 다시 들어갈 수 있습니다.
import threading,time def run(n): semaphore.acquire() time.sleep(1) print("run the thread: %s\n" %n) semaphore.release() if __name__ == '__main__': num= 0 semaphore = threading.BoundedSemaphore(5) #最多允许5个线程同时运行 for i in range(20): t = threading.Thread(target=run,args=(i,)) t.start() while threading.active_count() != 1: pass #print threading.active_count() else: print('----all threads done---') print(num)
이벤트 스레드 간 통신
Python은 스레드 간 통신을 위한 이벤트 개체를 제공합니다. 이는 스레드에서 설정한 신호 플래그입니다. 신호 플래그가 true이면 다른 스레드는 신호에 도달할 때까지 기다립니다.
Event 객체는 간단한 스레드 통신 메커니즘을 구현하며 스레드 간 통신을 실현하기 위한 신호 설정, 신호 지우기, 대기 등을 제공합니다.
이벤트 사용
event = threading.Event()
event.wait()
이벤트 객체의 대기 메소드는 내부 신호가 true이고 반품을 완료하세요. Event 객체의 내부 신호 플래그가 false인 경우 wait 메서드는 반환하기 전에 true가 될 때까지 기다립니다.
event.set()
Event의 set() 메서드를 사용하여 Event 개체 내부의 신호 플래그를 true로 설정합니다. Event 객체는 내부 신호 플래그의 상태를 확인하기 위해 isSet() 메서드를 제공합니다. 이벤트 객체의 set() 메서드를 사용하면 isSet() 메서드가 true를 반환합니다
event.clear()
Event 객체의clear() 메서드를 사용하면 이벤트 내부의 신호 플래그를 지울 수 있습니다. 즉, set it false인 경우 Event의clear 메소드를 사용하면 isSet() 메소드가 false를 반환합니다.
위 내용은 이 글에 설명된 내용이 전부입니다. 이 글은 주로 pythonSemaphore(세마포어) 관련 지식을 소개하는 내용입니다. 이 글에서 제가 설명한 내용이 여러분에게 도움이 되고 파이썬을 더 쉽게 배울 수 있기를 바랍니다.
더 많은 관련 지식을 알고 싶으시면 PHP 중국어 홈페이지의 Python tutorial 칼럼을 방문해 주세요.
위 내용은 파이썬 세마포어(세마포어)란 무엇입니까? (자세한 예시)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!