# 573
import time
import concurrent.futures
# 5こ食べるとお腹いっぱい、30休憩
global sushi # 出来た寿司の配列
sushi = [] # 先頭から供給され最後から取り出される
MANPUKU = 4
KYUKEI = 6
start = time.time()
def jikoku():
t = int((time.time()-start)*100)/100
#print(f'時刻関数 jikoku()={t:.2f}')
return t
print('開店時間=', jikoku())
def tsukuru():
neta = ['マグロ','カッパ','ウニ','上トロ','エンガワ']
n = 0
t = 0.5 # 作る間隔
while True:
l = len(sushi)
if l < 3 :
sushi.append([neta[n%len(neta)] , jikoku()]) # 寿司を供給
n += 1
if l+1 < 3 and t>0.2 : t -= 0.2 #皿が少ないから作る間隔を早める
else:
sushi.append(['空皿',jikoku()]) # 作りすぎだから空皿
t += 0.6
print(f'\n★★{sushi[-1][0]} が出来た時刻={sushi[-1][1]} 作成間隔 t={t:.2f}' )#
time.sleep(t)
# who 名前
# speed 食べる速さ/時間
# kosu 連続して食べた個数
# return kosu
def feat(who,speed,kosu):
print(f'\n{who}の取皿開始 speed={speed:.1f} kosu={kosu} 時刻は {jikoku()}')
while True:
c=0
nani,j = '',0
l = len(sushi)
if l > 0 :
nani,j = sushi.pop(0)
#print(f'{nani} 時刻j={j}')
if nani == '空皿' or l==0 :
if c==0 and nani == '空皿':
print(f'{who}が{nani}取った。待ってるよ 時刻={jikoku()} c={c}')
c += 1
else: c += 1
time.sleep(0.2) # 空皿なので次の皿を待つ
else: break
print(f'{who}が{nani}を食った 作成時刻={j}')
kosu += 1
if kosu >= MANPUKU :
print(f'{who}が満腹 休むよ 時刻={jikoku():}')
time.sleep(KYUKEI) # 食べて休憩
kosu = 0;
else: time.sleep(speed) # 食べる時間
return kosu
def fa():
kosu = 0 # 食べた個数
while True:
kosu = feat('A',0.7 ,kosu) # 誰, 食べる速さ、食べた個数 return kosu+1 or0
def fb():
kosu = 0 # 食べた個数
while True:
kosu = feat('B',1.0 ,kosu) # 誰, 食べる速さ、食べた個数 return kosu+1 or0
def fc():
kosu = 0 # 食べた個数
while True:
kosu = feat('C',1.4 ,kosu) # 誰, 食べる速さ、食べた個数 return kosu+1 or0
if __name__ == "__main__":
executor = concurrent.futures.ThreadPoolExecutor(max_workers=4)
executor.submit(fa) # 客A
executor.submit(fb) # 客B
executor.submit(fc) # 客C
executor.submit(tsukuru()) # 握り開始
''' 出力
開店時間= 0.0
Aの取皿開始 speed=0.7 kosu=0 時刻は 0.0
Bの取皿開始 speed=1.0 kosu=0 時刻は 0.01
Cの取皿開始 speed=1.4 kosu=0 時刻は 0.02
★★マグロ が出来た時刻=0.03 作成間隔 t=0.30
Cがマグロを食った 作成時刻=0.03
★★カッパ が出来た時刻=0.33 作成間隔 t=0.10
Aがカッパを食った 作成時刻=0.33
★★ウニ が出来た時刻=0.43 作成間隔 t=0.10
★★上トロ が出来た時刻=0.53 作成間隔 t=0.10
Cがウニを食った 作成時刻=0.43
Cが満腹 休むよ 時刻=0.63
Aが上トロを食った 作成時刻=0.53
★★エンガワ が出来た時刻=0.64 作成間隔 t=0.10
★★マグロ が出来た時刻=0.74 作成間隔 t=0.10
Bがエンガワを食った 作成時刻=0.64Bがマグロを食った 作成時刻=0.74
★★カッパ が出来た時刻=0.84 作成間隔 t=0.10
★★ウニ が出来た時刻=0.94 作成間隔 t=0.10
★★上トロ が出来た時刻=1.04 作成間隔 t=0.10
Aの取皿開始 speed=0.7 kosu=1 時刻は 1.11
Aがカッパを食った 作成時刻=0.84
★★エンガワ が出来た時刻=1.14 作成間隔 t=0.10
★★空皿 が出来た時刻=1.24 作成間隔 t=0.70
Aの取皿開始 speed=0.7 kosu=3 時刻は 1.34
Aがウニを食った 作成時刻=0.94
Aが満腹 休むよ 時刻=1.34
Cの取皿開始 speed=1.4 kosu=1 時刻は 1.43
Cが上トロを食った 作成時刻=1.04
Aの取皿開始 speed=0.7 kosu=2 時刻は 1.82
Aがエンガワを食った 作成時刻=1.14
Bの取皿開始 speed=1.0 kosu=1 時刻は 1.84
Bの取皿開始 speed=1.0 kosu=1 時刻は 1.84
Bが空皿取った。待ってるよ 時刻=1.84 c=0
★★マグロ が出来た時刻=1.94 作成間隔 t=0.50
Bがマグロを食った 作成時刻=1.94
★★カッパ が出来た時刻=2.44 作成間隔 t=0.30Bがカッパを食った 作成時刻=2.44
Aの取皿開始 speed=0.7 kosu=3 時刻は 2.52
'''