fork download
  1. # 573
  2. import time
  3. import concurrent.futures
  4. # 5こ食べるとお腹いっぱい、30休憩
  5.  
  6. global sushi # 出来た寿司の配列
  7. sushi = [] # 先頭から供給され最後から取り出される
  8. MANPUKU = 4
  9. KYUKEI = 6
  10.  
  11. start = time.time()
  12.  
  13. def jikoku():
  14. t = int((time.time()-start)*100)/100
  15.  
  16. #print(f'時刻関数 jikoku()={t:.2f}')
  17. return t
  18.  
  19. print('開店時間=', jikoku())
  20.  
  21. def tsukuru():
  22. neta = ['マグロ','カッパ','ウニ','上トロ','エンガワ']
  23. n = 0
  24. t = 0.5 # 作る間隔
  25. while True:
  26. l = len(sushi)
  27. if l < 3 :
  28. sushi.append([neta[n%len(neta)] , jikoku()]) # 寿司を供給
  29. n += 1
  30. if l+1 < 3 and t>0.2 : t -= 0.2 #皿が少ないから作る間隔を早める
  31. else:
  32. sushi.append(['空皿',jikoku()]) # 作りすぎだから空皿
  33. t += 0.6
  34. print(f'\n★★{sushi[-1][0]} が出来た時刻={sushi[-1][1]} 作成間隔 t={t:.2f}' )#
  35. time.sleep(t)
  36.  
  37.  
  38. # who 名前
  39. # speed 食べる速さ/時間
  40. # kosu 連続して食べた個数
  41. # return kosu
  42. def feat(who,speed,kosu):
  43. print(f'\n{who}の取皿開始  speed={speed:.1f} kosu={kosu} 時刻は {jikoku()}')
  44. while True:
  45. c=0
  46. nani,j = '',0
  47. l = len(sushi)
  48. if l > 0 :
  49. nani,j = sushi.pop(0)
  50. #print(f'{nani} 時刻j={j}')
  51. if nani == '空皿' or l==0 :
  52. if c==0 and nani == '空皿':
  53. print(f'{who}が{nani}取った。待ってるよ 時刻={jikoku()} c={c}')
  54. c += 1
  55. else: c += 1
  56. time.sleep(0.2) # 空皿なので次の皿を待つ
  57. else: break
  58.  
  59. print(f'{who}が{nani}を食った 作成時刻={j}')
  60. kosu += 1
  61. if kosu >= MANPUKU :
  62. print(f'{who}が満腹 休むよ 時刻={jikoku():}')
  63. time.sleep(KYUKEI) # 食べて休憩
  64. kosu = 0;
  65. else: time.sleep(speed) # 食べる時間
  66. return kosu
  67.  
  68. def fa():
  69. kosu = 0 # 食べた個数
  70. while True:
  71. kosu = feat('A',0.7 ,kosu) # 誰, 食べる速さ、食べた個数  return kosu+1 or0
  72.  
  73. def fb():
  74. kosu = 0 # 食べた個数
  75. while True:
  76. kosu = feat('B',1.0 ,kosu) # 誰, 食べる速さ、食べた個数  return kosu+1 or0
  77.  
  78. def fc():
  79. kosu = 0 # 食べた個数
  80. while True:
  81. kosu = feat('C',1.4 ,kosu) # 誰, 食べる速さ、食べた個数  return kosu+1 or0
  82.  
  83. if __name__ == "__main__":
  84. executor = concurrent.futures.ThreadPoolExecutor(max_workers=4)
  85. executor.submit(fa) # 客A
  86. executor.submit(fb) # 客B
  87. executor.submit(fc) # 客C
  88. executor.submit(tsukuru()) # 握り開始
  89.  
  90.  
  91. ''' 出力
  92. 開店時間= 0.0
  93.  
  94. Aの取皿開始  speed=0.7 kosu=0 時刻は 0.0
  95.  
  96. Bの取皿開始  speed=1.0 kosu=0 時刻は 0.01
  97. Cの取皿開始  speed=1.4 kosu=0 時刻は 0.02
  98.  
  99. ★★マグロ が出来た時刻=0.03 作成間隔 t=0.30
  100.  
  101. Cがマグロを食った 作成時刻=0.03
  102.  
  103. ★★カッパ が出来た時刻=0.33 作成間隔 t=0.10
  104. Aがカッパを食った 作成時刻=0.33
  105.  
  106. ★★ウニ が出来た時刻=0.43 作成間隔 t=0.10
  107.  
  108. ★★上トロ が出来た時刻=0.53 作成間隔 t=0.10
  109. Cがウニを食った 作成時刻=0.43
  110. Cが満腹 休むよ 時刻=0.63
  111. Aが上トロを食った 作成時刻=0.53
  112.  
  113. ★★エンガワ が出来た時刻=0.64 作成間隔 t=0.10
  114.  
  115. ★★マグロ が出来た時刻=0.74 作成間隔 t=0.10
  116. Bがエンガワを食った 作成時刻=0.64Bがマグロを食った 作成時刻=0.74
  117.  
  118.  
  119. ★★カッパ が出来た時刻=0.84 作成間隔 t=0.10
  120.  
  121. ★★ウニ が出来た時刻=0.94 作成間隔 t=0.10
  122.  
  123. ★★上トロ が出来た時刻=1.04 作成間隔 t=0.10
  124.  
  125. Aの取皿開始  speed=0.7 kosu=1 時刻は 1.11
  126. Aがカッパを食った 作成時刻=0.84
  127.  
  128. ★★エンガワ が出来た時刻=1.14 作成間隔 t=0.10
  129.  
  130. ★★空皿 が出来た時刻=1.24 作成間隔 t=0.70
  131.  
  132. Aの取皿開始  speed=0.7 kosu=3 時刻は 1.34
  133. Aがウニを食った 作成時刻=0.94
  134. Aが満腹 休むよ 時刻=1.34
  135.  
  136. Cの取皿開始  speed=1.4 kosu=1 時刻は 1.43
  137. Cが上トロを食った 作成時刻=1.04
  138.  
  139. Aの取皿開始  speed=0.7 kosu=2 時刻は 1.82
  140. Aがエンガワを食った 作成時刻=1.14
  141.  
  142. Bの取皿開始  speed=1.0 kosu=1 時刻は 1.84
  143. Bの取皿開始  speed=1.0 kosu=1 時刻は 1.84
  144. Bが空皿取った。待ってるよ 時刻=1.84 c=0
  145.  
  146.  
  147. ★★マグロ が出来た時刻=1.94 作成間隔 t=0.50
  148. Bがマグロを食った 作成時刻=1.94
  149.  
  150. ★★カッパ が出来た時刻=2.44 作成間隔 t=0.30Bがカッパを食った 作成時刻=2.44
  151.  
  152.  
  153. Aの取皿開始  speed=0.7 kosu=3 時刻は 2.52
  154.  
  155.  
  156. '''
  157.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Traceback (most recent call last):
  File "/usr/lib/python3.5/py_compile.py", line 125, in compile
    _optimize=optimize)
  File "<frozen importlib._bootstrap_external>", line 735, in source_to_code
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "./prog.py", line 19
    print(f'開店時間={jikoku()}' )
                           ^
SyntaxError: invalid syntax

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.5/py_compile.py", line 129, in compile
    raise py_exc
py_compile.PyCompileError:   File "./prog.py", line 19
    print(f'開店時間={jikoku()}' )
                           ^
SyntaxError: invalid syntax

stdout
Standard output is empty