Python+;过程计算时间的SimPy保持
我想进行模拟,其中服务时间取决于某些函数的计算复杂度 请求到达不应因函数处理而停止。 为了进行测试,我使用了使用cpu数秒的示例函数:Python+;过程计算时间的SimPy保持,python,simulation,simpy,Python,Simulation,Simpy,我想进行模拟,其中服务时间取决于某些函数的计算复杂度 请求到达不应因函数处理而停止。 为了进行测试,我使用了使用cpu数秒的示例函数: sorted([float(random.random()) for i in range(1000000)]) 如何调用它来模拟服务,但不阻止新的服务请求到达。如果我调用这个函数,新的服务请求将在函数执行之后到达,而不是在指定的时间到达 def visit(self, timeAtNAT, res): arrive=time.clock()-startT
sorted([float(random.random()) for i in range(1000000)])
如何调用它来模拟服务,但不阻止新的服务请求到达。如果我调用这个函数,新的服务请求将在函数执行之后到达,而不是在指定的时间到达
def visit(self, timeAtNAT, res):
arrive=time.clock()-startTime
print("%7.4f. Packet #%s arrived." % (time.clock()-startTime, self.name))
yield request, self, res
wait = time.clock()-startTime - arrive
print("%7.4f. Packet #%s waited %6.3f" % (time.clock()-startTime, self.name, wait))
sorted([float(random.random()) for i in range(1000000)])
yield release, self, res
print("%7.4f. Packet #%s left" % (time.clock()-startTime, self.name))
所以,在我的示例中,新数据包只在前一个数据包离开后到达
我试图使用
多处理
,但遇到了命名冲突(属于进程
类)。
我是SimPy、并行编程和Python的新手 我认为你在这里混合了各种方法,如果你在模拟复杂的计算——你实际上没有做复杂的计算——你会做一个算法,计算出计算所需的时间数量级,然后给它添加一些随机抖动(即,将其更改+/-5%或其他) SimPy是一个离散事件模拟框架-这意味着所有计算在模拟时间内有效地瞬时发生,因为模拟不会继续到下一个事件(要在模拟时间内继续,必须继续到下一个事件——{虽然移动到下一个事件并不意味着在模拟时间向前移动,因为下一个事件可能同时发生}) 让我们用这个算法来计算复杂计算所需的时间。让我们把它变成指数复杂度的算法,即用大O表示法:O(2n)
其中,10应替换为表示计算复杂性的int。DES框架不使用多线程,它们只是按顺序确定地计算所有内容,然后将其添加到要发生的事件的时间线中。我不知道simpy,但“离散事件模拟”可能与之相反“并行编程”。对我来说,实际的挂钟时间应该影响模拟结果的想法听起来很奇怪。另外,你想了解Python GIL(全局解释器锁)。“我试图使用
多处理
,但我遇到了命名冲突(关于进程
类)“这怎么可能?进行多处理。处理(…)
永远不会使用其他类,除非您修改模块。此外,您还可以使用as
从多处理导入过程导入别名为的类作为EasterBunny
,然后在创建新进程时使用EasterBunny
。您使用的是哪个版本的Simpy?
def calculateComputationComplexity(self, cValue):
#lets make this an exponential algorithm
algorithmTime = 0
if cValue < 17:
algorithmTime = 2**cValue
else:
algorithmTime = 2**16
return algorithmTime
def visit(self, timeAtNAT, res):
arrive=time.clock()-startTime
print("%7.4f. Packet #%s arrived." % (time.clock()-startTime, self.name))
yield request, self, res
wait = time.clock()-startTime - arrive
print("%7.4f. Packet #%s waited %6.3f" % (time.clock()-startTime, self.name, wait))
waitTime = self.calculateComputationComplexity(10)
yield hold, self, waitTime
yield release, self, res
print("%7.4f. Packet #%s left" % (time.clock()-startTime, self.name))