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 모듈 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기