我正在做一项作业,我必须使用 SimPy 来完成它。基本上有一个我必须实现的算法,该算法由两个过程(基本上是两个不同的函数)组成。第一个程序完成后,必须开始第二个程序。我找不到办法吗?
import random
import networkx as nx
from distsim import *
import matplotlib.pyplot as plt
class Alg1(Node):
def __init__(self,*args):
Node.__init__(self, *args)
self.dist = 0
self.dists = {}
self.all_dists = {}
self.time_stamp_one = 0
self.vel = 10
self.procedure_1_proc = self.env.process(self.procedure_1())
self.procedure_2_proc = self.env.process(self.procedure_2())
def procedure_1(self):
*This function includes procedure_1's operations
*This one has to start first and shouldn't be interrupted until its done
def procedure_2(self):
*This function includes procedure_2's operations
*After procedure_1 is completed, this function will take the rest
我尝试在 procedure_2 中使用 env.timeout() 函数足够的时间来完成 procedure_1,但它不起作用,并且 procedure_2 在每次迭代中都会中断。
根据@Michael的建议,我做了以下更改:
def run(self):
print("------RUN1--------")
self.procedure_1_proc = self.env.process(self.procedure_1())
yield self.env.process(self.procedure_1())
print("------RUN2--------")
self.procedure_2_proc = self.env.process(self.procedure_2())
yield self.env.process(self.procedure_2())
基本上我是按顺序创建和生成流程。但在这种情况下, procedure_1 启动并正常工作,但之后 procedure_2 未启动。为什么会这样?
下面显示了程序的输出。看起来在 procedure_1() 开始之前,它进入了 run() 4 次,但在第一次yield 之后就不再继续了。
------RUN1--------
------RUN1--------
------RUN1--------
------RUN1--------
----------PROCEDURE1--------------
0: TIMEOUT received from 0 at time 2
----------PROCEDURE1--------------
0: TIMEOUT received from 0 at time 2
----------PROCEDURE1--------------
1: PROBE received from 0 at time 3
{0: 10.0}
----------PROCEDURE1--------------
1: PROBE received from 0 at time 3
----------PROCEDURE1--------------
0: REPLY received from 1 at time 4
{1: 10.0}
----------PROCEDURE1--------------
0: PROBE received from 1 at time 4
----------PROCEDURE1--------------
2: PROBE received from 1 at time 4
{1: 10.0}
----------PROCEDURE1--------------
1: REPLY received from 2 at time 5
{0: 10.0, 2: 10.0}
----------PROCEDURE1--------------
1: PROBE received from 2 at time 5
----------PROCEDURE1--------------
3: PROBE received from 2 at time 5
{2: 10.0}
----------PROCEDURE1--------------
2: REPLY received from 3 at time 6
{1: 10.0, 3: 10.0}
----------PROCEDURE1--------------
2: PROBE received from 3 at time 6
试试这个
def run(self):
print("------RUN1--------")
procedure_1_proc = self.env.process(self.procedure_1())
yield procedure_1_proc
print("------RUN2--------")
procedure_2_proc = self.env.process(self.procedure_2())
yield procedure_2_proc
也将这些行放入
__init__()
self.procedure_1_proc = self.env.process(self.procedure_1())
self.procedure_2_proc = self.env.process(self.procedure_2())
如果这不起作用,您的代码可能存在其他问题。您可以发布代码的完整示例吗?你如何调用run()?