【问题标题】:monitor function name error using simpy使用 simpy 监控函数名错误
【发布时间】:2016-06-30 22:22:47
【问题描述】:

对 python 非常陌生,并尝试使用我在网上找到的简单脚本来排队时间。当我使用“监视器”时出现名称错误 - 我认为这是 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(),)

【问题讨论】:

  • 欢迎来到 StackOverflow!通过发布一个 small 工作示例,您更有可能得到答案,如果您可以发布实际的错误消息以及它来自哪一行,这也很有帮助。
  • 您使用的是旧版且不受支持的 SimPy 2。请考虑使用 SimPy 3:simpy.readthedocs.org

标签: python simpy


【解决方案1】:

您目前收到name error,因为您的脚本中目前尚未定义Monitor。为了在simpy 中使用Monitor,您需要将import simpy 更改为from simpy import Monitor 或为您当前使用Monitor 函数的位置附加simpy.Monitor。

例如:

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

或者(第 71-73 行):

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

【讨论】:

  • 感谢您的回复。当我附加 simpy.Monitor 时,我现在得到一个属性错误:模块没有对象“监视器”有什么想法吗?
  • @JayFrank 好吧,我在上面的代码中没有看到monitor,所以它要么在您的依赖项之一中,要么在某处有simpy.monitor 而不是simpy.Monitor()。如果没有确切的错误消息,很难判断它可能是哪种情况。
  • 这是得到错误 m=Monitor() 的代码,这是我将其切换到 m=simpy.Monitor() 时出现的错误 b> AttributeError: 'module' 对象没有属性 'monitor'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2014-11-30
  • 2012-01-07
  • 1970-01-01
相关资源
最近更新 更多