美文网首页
Python基础题型实战02-排队进行核酸检测

Python基础题型实战02-排队进行核酸检测

作者: Tony_Pm | 来源:发表于2022-08-31 13:37 被阅读0次

    序言

    只有当你下定决心改变,才会有接下来的改变。
    学会慢慢地稳定情绪,保持住自己的节奏,一起好好的生活,努力去追求更加美好的事物。

    需求

    第二题需求.jpg

    实战

    思路流程图绘制

    2流程图.jpg

    代码原理实现

    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()
    
    
    

    在这个浮躁的时代;竟然还有人能坚持篇篇原创;

    如果本文对你学习有所帮助-可以点赞👍+ 关注!将持续更新更多新的文章。

    支持原创。感谢!

    相关文章

      网友评论

          本文标题:Python基础题型实战02-排队进行核酸检测

          本文链接:https://www.haomeiwen.com/subject/ltfogrtx.html