Python 다 중 스 레 드 Queue 모듈 흔 한 용법
queue 는 python 의 표준 라 이브 러 리 입 니 다.속칭 대기 열 이 라 고 하 며,직접 import 참조 가 가능 합 니 다.python 2.x 에서 모듈 이름 은 Queue 입 니 다.
python 에서 여러 스 레 드 간 의 데 이 터 는 공유 되 고 여러 스 레 드 가 데이터 교환 을 할 때 데이터 의 안전성 과 일치 성 을 확보 할 수 없 기 때문에 여러 스 레 드 가 데이터 교환 을 해 야 할 때 대기 열 이 나타 납 니 다.대기 열 은 스 레 드 간 의 데이터 교환 을 완벽 하 게 해결 하여 스 레 드 간 데이터 의 안전성 과 일치 성 을 확보 할 수 있 습 니 다.
Python 의 Queue 모듈 에 서 는 FIFO(선 입 선 출)대기 열 Queue,LIFO(선 입 선 출)대기 열 LifoQueue,우선 순위 대기 열 Priority Queue 를 포함 하여 동기 화 되 고 안전 한 대기 열 클래스 를 제공 합 니 다.
이 대기 열 들 은 모두 잠 금 원 어 를 실현 하여 다 중 스 레 드 에서 직접 사용 할 수 있 고 대기 열 을 사용 하여 스 레 드 간 의 동기 화 를 실현 할 수 있 습 니 다.
Queue 모듈 에서 자주 사용 하 는 방법:
Queue.qsize()대기 열의 크기 를 되 돌려 줍 니 다.
Queue.empty()대기 열 이 비어 있 으 면 True 로 돌아 가 고,반대로 False 로 돌아 갑 니 다.
Queue.full()대기 열 이 가득 차 면 True 로 돌아 가 고,반대로 False 로 돌아 갑 니 다.
Queue.full 과 maxsize 크기 대응
Queue.get([Block[,timeout]])대기 열 가 져 오기,timeout 대기 시간
Queue.get_nowait()상당히 Queue.get(false)
Queue.put(item)대기 열 기록,timeout 대기 시간
Queue.put_nowait(item)상당히 Queue.put(item,False)
Queue.task_done()한 가지 일 을 마 친 후,Queue.taskdone()함수 가 작업 이 완 료 된 대기 열 에 신 호 를 보 냅 니 다.
Queue.join()은 실제 대기 열 이 비어 있 을 때 까지 기 다 렸 다가 다른 작업 을 수행 하 는 것 을 의미 합 니 다.
import threading
import time
def a():
print("a start
")
for i in range(10):
time.sleep(0.1)
print("a finish
")
def b():
print("b start
")
print("b finish
")
def main():
# t=threading.Thread(target=a,name="T")
t = threading.Thread(target=a)
t2=threading.Thread(target=b)
t.start()
t2.start()
# t2.join()
# t.join()
print("all done
")
if __name__ == '__main__':
main()
Queue 모듈:
import queue
import threading
import time
exitFlag = 0
class myThread (threading.Thread):
def __init__(self, threadID, name, q):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.q = q
def run(self):
print (" :" + self.name)
process_data(self.name, self.q)
print (" :" + self.name)
def process_data(threadName, q):
while not exitFlag:
queueLock.acquire()
if not workQueue.empty():
data = q.get()
queueLock.release()
print ("%s processing %s" % (threadName, data))
else:
queueLock.release()
time.sleep(1)
threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = queue.Queue(10)
threads = []
threadID = 1
#
for tName in threadList:
thread = myThread(threadID, tName, workQueue)
thread.start()
threads.append(thread)
threadID += 1
#
queueLock.acquire()
for word in nameList:
workQueue.put(word)
queueLock.release()
#
while not workQueue.empty():
pass
#
exitFlag = 1
#
for t in threads:
t.join()
print (" ")
파 이 썬 다 중 스 레 드 Queue 모듈 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.파 이 썬 Queue 모듈 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.