2016-08-30 5 views
0

Simpy 2で書かれたコードをバージョン3に移動していて、次の操作に相当するものが見つかりませんでした。Simpyリソースキュー内のオブジェクトにアクセスする方法

以下のコードでは、SimpyリソースのactiveQ内のジョブオブジェクト(クラスjob_(プロセス)から派生したもの)にアクセスします。あるSimpy 3でこれを行うに

def select_LPT(self, mc_no): 
    job = 0 
    ptime = 0 
    for j in buffer[mc_no].activeQ: 
     if j.proc_time[mc_no] > ptime: 
      ptime = j.proc_time[mc_no] 
      job = j 

    return job 

、Iは、Request()オブジェクトのリストを返し、次の

buffers[mc_no].users

を試みました。これらのオブジェクトでは、それらを作成したプロセスや、これらのプロセス関数が属するオブジェクトにはアクセスできません。 (リソースオブジェクトの 'put_queue'と 'get_queue'を使用しても助けにならなかった)

何か提案がありますか?

答えて

0

SimPyでは、要求オブジェクトは、どのプロセスがそれらを作成したかを知らない。しかし、私たちはPythonの土地にあるので、簡単にこの情報を追加することができます:

with resource.request() as req: 
    req.obj = self 
    yield req 
    ... 

# In another process/function 
for user_req in resource.users: 
    print(user_req.obj) 
+0

長いPythonの土地に住んでいます! - ありがとうございました。私は後続の質問を持っています:私はSimpy 2のように、プロセス関数go()を持つジョブクラスを持っています。req.obj = selfでは、オブジェクトデータをスティックします。私はプロセスを中断し、ジョブオブジェクトにそのフローを再開させたいからです。 –

+0

心配しないでください。オブジェクトのコンストラクタでプロセスを作成し、それを属性として保持してから、ジョブオブジェクトにアクセスしてください。 –

関連する問題