2016-06-30 16 views
0

python非常新,并尝试使用我在线发现的simpy脚本排队时间。当我使用“监视器” - 我认为它是SimPy的一部分时,出现名称错误。还有其他地方我应该从进口显示器?使用simpy监视函数名称错误

在此先感谢您的帮助!

见下文:

#!/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

欢迎的StackOverflow!您更可能通过发布一个**小**工作示例来获得答案,并且如果您可以发布实际的错误消息以及它来自哪一行,那也很有帮助。 –

+0

您正在使用旧的且不受支持的SimPy 2.请考虑使用SimPy 3:simpy.readthedocs.org –

回答

0

您正在接收name error因为Monitor没有被当前的脚本中定义。为了使用simpy中的Monitor,您需要将import simpy更改为from simpy import Monitor或将simpy.Monitor更改为您当前正在使用Monitor函数的位置。

例:

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

或(71-73行):

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

感谢您的回复。当我追加simpy.Monitor我现在得到一个属性错误: 模块没有对象“显示器” 任何想法? –

+0

@JayFrank我在上面的代码中没有看到'monitor',所以它在你的依赖关系之内,或者你有'simpy.monitor'而不是'simpy.Monitor()'某处。如果没有确切的错误信息,很难判断它可能是哪种情况。 –

+0

下面是获取错误 ** M =监视器()** 和这里是错误,当我切换到 ** M = simpy.Monitor()** ** AttributeError的代码:'module'对象没有属性'monitor'** –