通过板砖案例实现多线程执行 - Thread,工人,搬砖案例

# -*-  coding: utf-8  -*-
from threading import Thread
from queue import Queue
import time
# 无论工人多,或工厂少,均先工厂完成后,工人才可以完成。通过che.put('abc')来进行判断,当砖长全部生产完后,工人才可以结束。


class GongChang(Thread): # 继承Thread
    def __init__(self,name,num,qc):
        super().__init__()
        self.name = name
        self.num  = num
        self.che  = qc
    def run(self):   # 重写线程中run函数,自动运行
        while self.num > 0 :
            self.che.put(100)
            print(f'{self.name}还差{self.num-1}车砖')
            self.num -= 1
        print(f'{self.name}生产完毕,下班!')

class GongRen(Thread):
    def __init__(self,name,qc1):
        super().__init__()
        self.name = name
        self.che =qc1
    def run(self):
        while True:
            zt = self.che.get()
            if zt == 'abc':
               print(f'{self.name}搬完下班了')
               che.put('abc')
               break
            print(f'{self.name}搬了{zt}块砖头')

if __name__ == '__main__':
    che = Queue()
    GC_name = ['工厂A','工厂B','工厂C']
    GR_name = ['张三','李四','王五','韩六','韩7','韩8','韩9','韩10','韩11']

    l = []
    g = []
    for x in GC_name:
        gc = GongChang(x,20,che)
        gc.start()
        l.append(gc)    #添加线程到线程列表

    for x in GR_name:
        gc = GongRen(x,che)
        gc.start()
        g.append(gc)

    for i in l:
        i.join()    # join 对调用的线性进行阻塞,执行完后,支撑后面程序。
    che.put('abc')
    print("工厂全部下班了")

    for i in g:
        i.join()    # join 对调用的线性进行阻塞,执行完后,支撑后面程序。( 实际上意味着等到队列为空,再执行别的操作)

    print('主线程在这里就结束了了了了了了了---------')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值