<p>好的,这里有一个简单的答案。这里的关键是你的接收者不是一个进程。消息的接收是事件的结果。因此,创建一个超时事件,并让接收方作为该事件的回调</p>
<pre><code>import simpy
import random
class network:
def __init__(self) -> None:
self.env = simpy.Environment()
def generateMessage(self):
for i in range(10):
elapse = random.random() + 0.1
message = (f'message: {i}', f'travel time {elapse:.3f}')
print(f'gen at: {self.env.now:.3f} {message}')
event = self.env.timeout( elapse )
event.data = message
event.callbacks.append( self.receiveMessage )
yield self.env.timeout(0.1)
def receiveMessage(self, event):
print(f'receive at {self.env.now:.3f}, message: {event.data}')
def run(self):
self.env.process(self.generateMessage())
self.env.run(until=2)
q = network()
q.run()
</code></pre>
<p>输出:</p>
<pre><code>gen at: 0.000 ('message: 0', 'travel time 1.047')
gen at: 0.100 ('message: 1', 'travel time 0.179')
gen at: 0.200 ('message: 2', 'travel time 0.965')
receive at 0.279, message: ('message: 1', 'travel time 0.179')
gen at: 0.300 ('message: 3', 'travel time 0.913')
gen at: 0.400 ('message: 4', 'travel time 0.210')
gen at: 0.500 ('message: 5', 'travel time 0.277')
gen at: 0.600 ('message: 6', 'travel time 0.249')
receive at 0.610, message: ('message: 4', 'travel time 0.210')
gen at: 0.700 ('message: 7', 'travel time 0.941')
receive at 0.777, message: ('message: 5', 'travel time 0.277')
gen at: 0.800 ('message: 8', 'travel time 1.091')
receive at 0.849, message: ('message: 6', 'travel time 0.249')
gen at: 0.900 ('message: 9', 'travel time 0.968')
receive at 1.047, message: ('message: 0', 'travel time 1.047')
receive at 1.165, message: ('message: 2', 'travel time 0.965')
receive at 1.213, message: ('message: 3', 'travel time 0.913')
receive at 1.641, message: ('message: 7', 'travel time 0.941')
receive at 1.868, message: ('message: 9', 'travel time 0.968')
receive at 1.891, message: ('message: 8', 'travel time 1.091')
</code></pre>