Im folgenden Codeausschnitt versuche ich, das einfache Tutorial zu verstehen. Ich kann die Ausgabe nicht erklären. Ich erwarte, dass alle "\ o /" auf einmal gedruckt werden, bevor andere Anweisungen gedruckt werden. Außerdem gibt es ein Problem mit dem Rückruf.Ich kann den Ausführungsablauf im folgenden Code nicht verstehen. Nicht in der Lage, den Fehler sowie die Ausgabe zu erklären
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()
Die Ausgabe ist wie folgt:
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
Beachten Sie, dass Sie in '__init__' tatsächlich * aufrufen *' self.my_callback' und den Rückgabewert an 'callbacks' anhängen. Aber 'self.my_callback' gibt keinen Wert zurück, daher erhalten Sie eine Liste von' None' Werten. –
Nichts ist in Ordnung, aber warum der Fehler? – kosmos
Wenn Sie einen Fehler erhalten, bearbeiten Sie Ihre Frage, um das Traceback hinzuzufügen. –