# -*- 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('主线程在这里就结束了了了了了了了---------')