我希望这个问题是有意义的,我已经花了整整两天的时间试图解决这个问题。你知道吗
我正在尝试创建一个非常小的脚本,然后将其转换为一个Flask web应用程序,用于比较SPECint处理器的分数。你知道吗
一点背景:
从specint.org网站,我可以下载csv文件,其中包含处理器和服务器的基准信息。我的应用程序的想法是执行以下操作:
向用户询问他们需要的基准(cint或rint)、服务器 以及他们感兴趣的处理器。必须这样做 两次,对于服务器1和服务器2,以便比较它们。
我需要检查他们输入的信息是否正确, i、 e.如果有人输入处理器名称XYZ,则应引发 错误并提示输入有效查询。为此,我正在计划 将整个数据库的一个版本转储到我自己的数据库中,所以我 可以在实际从下载csv文件之前执行检查 服务器。
如果输入的信息是有效的,我会动态生成正确的url,直接从SPECint的服务器下载和读取包含基准分数信息的csv文件。
一旦我下载并处理了这两个服务器的信息,我会应用一些简单的数学,并返回类似这样的结果:“服务器1比服务器2快/慢10%”或类似的结果。
正如您可能想象的那样,这将需要大量的重复代码,因此它似乎是类的最佳用例。我做了一些测试,结果很有希望。你知道吗
然而,我的问题是,我还没有弄清楚如何捕获用户输入、测试输入、下载相应的csv文件以及以每个实例的方式传递用户输入,而不必在某个地方复制代码。我一直在搜索,它似乎是我所需要的,但我不确定,因为它的使用对我来说仍然是相当深奥的(我是一个新手)(参考:Example of Class with User Input)
例如,这是一种工作:
我的班级:
class Baseline:
def __init__(self, benchmark, model, processor):
self.benchmark = benchmark
self.model = model
self.processor = processor
捕获和打印实例结果。你知道吗
old_server = inputs.Baseline(test=input("Select benchmark: "),
model=input("Enter model: "),
processor=input("Enter processor: ")
)
new_server = inputs.Baseline(test=input("Select benchmark: "),
model=input("Enter model: "),
processor=input("Enter processor: ")
)
print(old_server.benchmark)
print(old_server.model)
print(new_server.benchmark)
print(new_server.model)
如您所见,我已经在重复代码了,相反,我想从类内部执行所有操作,因此我可以简单地调用它的实例来捕获、测试、下载和返回结果。正如我之前所说,似乎@classmethod
就是答案,但我希望能得到任何指导,希望能有一些示例代码,这样我就可以完全掌握这些概念。你知道吗
这是一个很长的问题,所以我希望我能正确地遵循你的想法,如果我做到了,你可以做如下事情:
你的主要目标是:
这是一个简化的情况,取决于您所做的检查以及您应该如何设计代码,如果要使用classmethod或instance方法(self)。如果您的实例有一个状态,而等价于
run
的实例使用该状态(例如与DB的连接),那么它应该是一个实例方法。你知道吗您可以这样做:
这将减少代码的重复性,因为创建新实例将是:
旁注您还可以实现
__str__
方法将其全部打印出来:打印也很简单:
作为一般建议,我不会指望用户对处理器模型和基准测试的“免费”输入,因为大多数时候它包含小写、大写数字等的混合输入
我要做的是,特别是因为你说你想使用
Flask
(这样就更简单了),把它缩小到你只支持的处理器模型和基准测试。在实现方面,这意味着应用程序上有一个下拉列表,以及模型、基准测试等的set
或list
。这也将为您省去输入验证的麻烦。你知道吗如果不是所有的模型都符合所有的基准测试,您可以使用
dict
来做一些簿记。但是如果簿记越来越复杂,可以考虑使用class
es进行“自动”簿记。 这些类可以是pickled
、jsonified
和其他方法,用于将它们保存到数据库中。你知道吗如果你共享更多的代码,我们可以提供更多帮助。 无论如何,我建议你把这个问题贴在code review上进行更深入的分析。你知道吗
相关问题 更多 >
编程相关推荐