0
次のコードスニペットでは、simpyチュートリアルを理解しようとしています。私は出力を説明することができません。私はすべての "\ o /"が他のステートメントが印刷される前に一度に印刷されることを期待しています。また、コールバックに問題があります。次のように次のコードで実行フローを理解できません。エラーと出力を説明できません
import simpy
class School:
def __init__(self, env):
self.env = env
self.class_ends = env.event()
self.pupil_procs = [env.process(self.pupil()) for i in range(3)]
for x in self.pupil_procs:
x.callbacks.append(self.my_callback(x))
#print(x.callbacks)
self.bell_proc = env.process(self.bell())
def bell(self):
for i in range(2):
value=yield self.env.timeout(45,value="bell_rang!at"+str(env.now))
self.class_ends.succeed(value='class_ends!')
print("in bell proc")
self.class_ends = self.env.event()
print(value)
def pupil(self):
for i in range(2):
print(' \o/',i, end=' ')
classends=yield self.class_ends
print('done!')
print(classends)
def my_callback(self,event):
print('Called back from',event)
env = simpy.Environment()
school = School(env)
env.run()
出力は次のようになります。
Called back from <Process(pupil) object at 0x7fd7ddce97b8>
Called back from <Process(pupil) object at 0x7fd7ddce9be0>
Called back from <Process(pupil) object at 0x7fd7ddcad5f8>
\o/ 0 \o/ 0 \o/ 0 in bell proc
bell_rang!at0
done!
class_ends!
\o/ 1 done!
class_ends!
\o/ 1 done!
class_ends!
\o/ 1 in bell proc
bell_rang!at45
done!
class_ends!
done!
class_ends!
done!
class_ends!
Traceback (most recent call last):
File "/home/deeplearning/PycharmProjects/python-scheduling/learnSimPy/learnmore.py", line 35, in <module>
env.run()
File "/usr/local/lib/python3.5/dist-packages/simpy/core.py", line 137, in run
self.step()
File "/usr/local/lib/python3.5/dist-packages/simpy/core.py", line 221, in step
callback(event)
TypeError: 'NoneType' object is not callable
Process finished with exit code 1
'__init__'では、実際には' self.my_callback'を呼び出して、 'callbacks'に戻り値を追加することに注意してください。しかし 'self.my_callback'は値を返さないので、' None'値のリストを取得します。 –
何も問題ありませんが、なぜそのエラーですか? – kosmos
エラーが発生した場合は、質問を編集してトレースバックを追加してください。 –