序言
只有當(dāng)你下定決心改變,才會有接下來的改變与柑。
學(xué)會慢慢地穩(wěn)定情緒谤辜,保持住自己的節(jié)奏,一起好好的生活价捧,努力去追求更加美好的事物丑念。
需求
第二題需求.jpg
實戰(zhàn)
思路流程圖繪制
2流程圖.jpg
代碼原理實現(xiàn)
import time
import queue
import threading
def worker(i):
global numbers_1,numbers_2
numbers_1 = 0
numbers_2 = 0
while True:
item = q.get()
try:
# 偶數(shù)
if (item % 2) == 0:
# time.sleep(2)
if (numbers_1 % 2)==0:
print("小紅醫(yī)生(代號%s)將一個群眾<%s>檢測完了!" % (i, item))
# 做完后發(fā)出任務(wù)完成信號结蟋,然后繼續(xù)下一個任務(wù)
q.task_done()
else:
time.sleep(2.5)
q.task_done()
numbers_1 += 1
else:
# 奇數(shù)
# 小明是小紅的2倍
print("小明醫(yī)生(代號%s)將一個群眾<%s>檢測完了脯倚!" % (i, item))
numbers_2 += 1
# 做完后發(fā)出任務(wù)完成信號,然后繼續(xù)下一個任務(wù)
q.task_done()
except TypeError:
print("今天沒有群眾需要檢測了嵌屎;醫(yī)生(代號%s),可以休息了推正。" % i)
if i==1:
print('醫(yī)生(代號%s)今天完成了的群眾數(shù)量為:%s'% (i, numbers_1))
elif i==2:
print('醫(yī)生(代號%s)今天完成了的群眾數(shù)量為:'% i, numbers_2)
# 做完后發(fā)出任務(wù)完成信號,然后繼續(xù)下一個任務(wù)
q.task_done()
break
if __name__ == '__main__':
num_of_threads = 2
# 模擬核酸檢測群眾
source = [i for i in range(1, 30)]
# 創(chuàng)建一個FIFO隊列對象宝惰,不設(shè)置上限
q = queue.Queue()
# 創(chuàng)建一個線程池
threads = []
# 創(chuàng)建指定個數(shù)的工作線程植榕,并講他們放到線程池threads中
for i in range(1, num_of_threads+1):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
# 將任務(wù)源里的任務(wù)逐個放入隊列
for item in source:
# 每隔0.5秒準(zhǔn)備下一個要檢測的群眾
time.sleep(0.5)
q.put(item)
# 阻塞隊列直到隊列里的任務(wù)都完成了
q.join()
print("-----統(tǒng)計小紅醫(yī)生、小明醫(yī)生工作完成的情況-----")
# 停止線程
for i in range(num_of_threads):
q.put(None)
for t in threads:
t.join()