>  기사  >  백엔드 개발  >  Python 스레드 우선순위 큐(queue) 원리 종합 분석

Python 스레드 우선순위 큐(queue) 원리 종합 분석

Tomorin
Tomorin원래의
2018-08-16 17:38:243099검색

Python의 대기열 모듈 은 FIFO(선입선출) 대기열 대기열, LIFO(후입선출) 대기열 LifoQueue 및 우선 순위 수준 queuePriorityQueue를 포함하여 스레드로부터 안전한 동기식 대기열 클래스를 제공합니다. 이러한 대기열은 잠금 기본 형식을 구현하며 다중 스레드에서 직접 사용할 수 있습니다. 대기열을 사용하여 스레드 간 동기화를 달성할 수 있습니다.

큐 모듈에서 일반적으로 사용되는 메서드:

1.Queue.qsize()는 큐의 크기를 반환합니다.

2.Queue.empty () 대기열이 비어 있으면 True를 반환하고, 그렇지 않으면 False

3.Queue.full() 대기열이 가득 차면 True를 반환하고, 그렇지 않으면 False

4를 반환합니다. Queue.full 및 maxsize 크기 대기열을 가져오려면

5.Queue.get([block[, timeout]])에 해당하며 시간 초과 대기 시간

6.Queue. get_nowait()는 Queue.get(False )

7.Queue.put(item)이 대기열에 기록하고 시간 초과 대기 시간

8.Queue.put_nowait( item)은 Queue.put(item, False)# 🎜🎜#

9.Queue.task_done() 작업을 완료한 후 Queue.task_done() 함수는 작업이 있는 대기열에 신호를 보냅니다. 완료됨

10.Queue.join( )은 실제로 다른 작업을 수행하기 전에 대기열이 빌 때까지 기다리는 것을 의미합니다.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
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 "Starting " + self.name
process_data(self.name, self.q)
print "Exiting " + 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 "Exiting Main Thread"

위 프로그램 실행 결과:

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread
# 🎜🎜#

위 내용은 Python 스레드 우선순위 큐(queue) 원리 종합 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.