82 lines
1.7 KiB
Python
82 lines
1.7 KiB
Python
# -*- encoding:utf-8 -*-
|
||
|
||
'''
|
||
@Author : dingjiawen
|
||
@Date : 2023/10/17 20:44
|
||
@Usage : 学习多线程库thread的使用
|
||
@Desc :
|
||
'''
|
||
|
||
'''
|
||
参考:
|
||
[1] https://cuiqingcai.com/3325.html
|
||
'''
|
||
|
||
import queue as 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:
|
||
# 获得锁,成功获得锁定后返回True
|
||
# 可选的timeout参数不填时将一直阻塞直到获得锁定
|
||
# 否则超时后将返回False
|
||
queueLock.acquire()
|
||
if not workQueue.empty():
|
||
data = q.get()
|
||
queueLock.release()
|
||
print("{0} processing {1}".format(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)
|
||
# release一个有一个线程能跑
|
||
queueLock.release()
|
||
|
||
# 等待队列清空
|
||
while not workQueue.empty():
|
||
pass
|
||
|
||
# 通知线程是时候退出
|
||
exitFlag = 1
|
||
|
||
# 等待所有线程完成
|
||
for t in threads:
|
||
t.join()
|
||
print("Exiting Main Thread")
|