Я пишу веб-приложение, которое позволяет выполнять и назначать приоритеты для долго выполняющихся заданий с использованием интерфейса на основе фляги.
Центральным компонентом моего приложения является класс 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, а функции управления очередями должны быть доступны для интерфейса фляги.
Как бы я этого достиг?