如何在 SimPy 中完成另一个进程后启动一个进程?

问题描述 投票:0回答:1

我正在做一项作业,我必须使用 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
python process synchronization simpy
1个回答
0
投票

试试这个

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()?

© www.soinside.com 2019 - 2024. All rights reserved.