2016-06-30 6 views
0

sehr neu zu Python und versuchen, ein simpy Skript zu verwenden, das ich online zu Warteschlange Zeiten gefunden. Ich bekomme einen Namensfehler, wenn ich "Monitor" benutze - was ich für einen Teil von SimPy hielt. Gibt es woanders, wo ich Monitor importieren sollte?Monitorfunktion Name Fehler mit Simpy

Vielen Dank im Voraus für die Hilfe!

Siehe unten:

#!/usr/bin/env python 
from __future__ import generators 
import simpy 

from multiprocessing import Queue, Process 
from random import Random,expovariate,uniform 
# MMC.py simulation of an M/M/c/FCFS/inft/infty queue 
# 2004 Dec updated and simplified 
# $Revision: 1.1.1.5 $ $Author: kgmuller $ $Date: 2006/02/02 13:35:45 $ 

"""Simulation of an M/M/c queue 

Jobs arrive at random into a c-server queue with 
exponential service-time distribution. Simulate to 
determine the average number and the average time 
in the system. 

- c = Number of servers = 3 
- rate = Arrival rate = 2.0 
- stime = mean service time = 1.0 

""" 
__version__='\nModel: MMC queue' 

class Generator(Process): 
    """ generates Jobs at random """ 

def execute(self,maxNumber,rate,stime): 
    ##print "%7.4f %s starts"%(now(), self.name) 
    for i in range(maxNumber): 
     L = Job("Job "+`i`) 
     activate(L,L.execute(stime),delay=0) 
     yield hold,self,grv.expovariate(rate) 

class Job(Process): 
    """ Jobs request a gatekeeper and hold it for an exponential time """ 

    def execute(self,stime):  
     global NoInSystem 
     arrTime=now() 
     self.trace("Hello World") 
     NoInSystem +=1 
     m.accum(NoInSystem) 
     yield request,self,server 
     self.trace("At last ") 
     t = jrv.expovariate(1.0/stime) 
     msT.tally(t) 
     yield hold,self,t 
     yield release,self,server 
     NoInSystem -=1 
     m.accum(NoInSystem) 
     mT.tally(now()-arrTime) 
     self.trace("Geronimo ") 

    def trace(self,message): 
     if TRACING: 
      print "%7.4f %6s %10s (%2d)"%(now(),self.name,message,NoInSystem) 



TRACING = 0 

print __version__ 
c = 3 
stime = 1.0 
rate = 2.0 
print "%2d servers, %6.4f arrival rate,%6.4f mean service time"%(c,rate,stime) 
grv = Random(333555) # RV for Source 
jrv = Random(777999) # RV for Job 
NoInSystem = 0 
m=Monitor() 
mT=Monitor() 
msT=Monitor() 
server=Resource(c,name='Gatekeeper') 

initialize() 
g = Generator('gen') 
activate(g,g.execute(maxNumber=10,rate=rate,stime=stime),delay=0) 
simulate(until=3000.0) 


print "Average number in the system is %6.4f"%(m.timeAverage(),) 
print "Average time in the system is %6.4f"%(mT.mean(),) 
print "Actual average service-time is %6.4f"%(msT.mean(),) 
+0

Willkommen bei Stackoverflow! Es ist wahrscheinlicher, dass Sie eine Antwort erhalten, indem Sie ein ** kleines ** funktionierendes Beispiel veröffentlichen, und wenn Sie die tatsächliche Fehlermeldung und die Zeile, aus der es kommt, posten können, ist das auch hilfreich. –

+0

Sie verwenden das alte und nicht unterstützte SimPy 2. Bitte verwenden Sie SimPy 3: simpy.readthedocs.org –

Antwort

0

Sie zur Zeit eine name error weil Monitor hat derzeit nicht in Ihrem Skript erhalten definiert. Um die Monitor von innerhalb simpy zu verwenden, müssen Sie entweder import simpy zu from simpy import Monitor ändern oder simpy.Monitor für die Standorte hinzufügen, die Sie derzeit die Monitor Funktion verwenden.

Ex:

#!/usr/bin/env python 
from __future__ import generators 
from simpy import Monitor 

Oder (Zeilen 71 bis 73):

m=simpy.Monitor() 
mT=simpy.Monitor() 
msT=simpy.Monitor() 
+0

Vielen Dank für Ihre Antwort. Wenn ich simpy.Monitor anschließe bekomme ich jetzt einen Attributfehler: Modul hat kein Objekt "Monitor" Irgendwelche Ideen? –

+0

@JayFrank Nun, ich sehe "Monitor" nicht in Ihrem Code oben, also ist es entweder in einem Ihrer Abhängigkeiten oder Sie haben 'simpy.monitor' anstelle von' simpy.Monitor() 'irgendwo. Ohne die genaue Fehlermeldung ist es schwer zu sagen, welcher Fall es sein könnte. –

+0

Hier ist der Code, der den Fehler ** m = Monitor() ** und hier bekommt, ist der Fehler, wenn ich es wechseln zu ** m = simpy.Monitor() ** ** Attribute : 'Modul' Objekt hat kein Attribut 'Monitor' ** –