2016-08-30 2 views
0

Ich verschiebe Code in Simpy 2 in Version 3 geschrieben und konnte keine Entsprechung zu der folgenden Operation finden.Simpy, wie auf Objekte in einer Ressourcenwarteschlange zugegriffen wird

Im folgenden Code greife ich auf Job-Objekte (abgeleitet von der Klasse job_ (Process)) in einer Simpy Ressource activeQ.

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 

dieses 3, in Simpy Dazu habe ich versucht, die folgende

buffers[mc_no].users

die eine Liste der Anfrage zurückgibt() Objekte. Mit diesen Objekten kann ich weder auf die Prozesse zugreifen, die sie erstellt haben, noch auf die Objekte, zu denen diese Prozessfunktionen gehören. (Verwenden der 'put_queue' und 'get_queue' des Ressource-Objekts hat nicht geholfen)

Irgendwelche Vorschläge?

Antwort

0

In SimPy wissen Request-Objekte nicht, welcher Prozess sie erstellt hat. Da wir jedoch in Python Land sind, können Sie diese Information leicht hinzufügen:

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

Es lebe das Land von Python! - Vielen Dank. Ich habe eine Folgefrage: Ich habe eine Jobklasse, die eine Prozessfunktion go() hat - wie in Simpy 2. Mit req.obj = selbst klebe ich die Objektdaten, nun wie ich die Prozessdaten festklebe. Ich brauche es, weil ich den Prozess unterbrechen möchte und das Job-Objekt seinen Fluss fortsetzen soll. –

+0

Macht nichts - fand es heraus. Erstellen Sie einfach den Prozess im Konstruktor des Objekts, behalten Sie es als Attribut bei und greifen Sie dann über das Jobobjekt zu. –

Verwandte Themen