序言
只有当你下定决心改变,才会有接下来的改变。
学会慢慢地稳定情绪,保持住自己的节奏,一起好好的生活,努力去追求更加美好的事物。
需求
实战
思路流程图绘制
代码原理实现
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:
# 偶数
if (item % 2) == 0:
# time.sleep(2)
if (numbers_1 % 2)==0:
print("小红医生(代号%s)将一个群众<%s>检测完了!" % (i, item))
# 做完后发出任务完成信号,然后继续下一个任务
q.task_done()
else:
time.sleep(2.5)
q.task_done()
numbers_1 += 1
else:
# 奇数
# 小明是小红的2倍
print("小明医生(代号%s)将一个群众<%s>检测完了!" % (i, item))
numbers_2 += 1
# 做完后发出任务完成信号,然后继续下一个任务
q.task_done()
except TypeError:
print("今天没有群众需要检测了;医生(代号%s),可以休息了。" % i)
if i==1:
print('医生(代号%s)今天完成了的群众数量为:%s'% (i, numbers_1))
elif i==2:
print('医生(代号%s)今天完成了的群众数量为:'% i, numbers_2)
# 做完后发出任务完成信号,然后继续下一个任务
q.task_done()
break
if __name__ == '__main__':
num_of_threads = 2
# 模拟核酸检测群众
source = [i for i in range(1, 30)]
# 创建一个FIFO队列对象,不设置上限
q = queue.Queue()
# 创建一个线程池
threads = []
# 创建指定个数的工作线程,并讲他们放到线程池threads中
for i in range(1, num_of_threads+1):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
# 将任务源里的任务逐个放入队列
for item in source:
# 每隔0.5秒准备下一个要检测的群众
time.sleep(0.5)
q.put(item)
# 阻塞队列直到队列里的任务都完成了
q.join()
print("-----统计小红医生、小明医生工作完成的情况-----")
# 停止线程
for i in range(num_of_threads):
q.put(None)
for t in threads:
t.join()