我正在编写一个Web应用程序,该应用程序允许使用基于烧瓶的前端执行长时间运行的作业并确定优先级。
我的应用程序的中心组件是Controller类,我想用它来将所有部分绑定在一起,例如: -从烧瓶前端进行外部呼叫, -与模型互动, -与工作执行引擎的互动。 -维护2个工作队列-主队列和普通队列
此刻,我将所有功能实现为类的方法,并且我感到一个可怕的设计缺陷:
class Controller ():
def __init__(self):
self.pq = queue.Queue()
self.be = queue.Queue()
def getJobStructureByTaskAlias(self, alias)
def getJobStructureByTaskId(self, id)
def checkRunningJobs(self)
def submitPriotiryJob(self)
def submitRegularJob(self)
def checkQueueSizes(self)
...
def jobDispatcher(self)
jobDispatcher()是在多个线程中运行的外部作业执行引擎的接口:
def jobDispatcher(self):
if not self.pq.empty():
job = self.pq.get()
else:
job = self.be.get()
tstamp = app.functions.file_tstamp()
app.logger.createEvent(1, 'Job invoked invoked: {}'.format(tstamp))
executorCode = walker.lab_walker.threadedExecutor(job, tstamp)
app.logger.createEvent(1, 'Job completed with status: {}'.format(executorCode))
return True
我觉得我在此实现上存在主要的设计缺陷。我需要确保控制器对象作为应用程序的中心组件能够从普通队列和优先级队列中获取作业,并以某种方式将其发送到jobDispatcher方法,并使队列管理功能可用于Flask接口。
我将如何实现?