def getWorkerList(self, app, page = 1): db_session = self.getDBSession() user = self.get_current_user() perPage = 5 # получаем количество count, = db_session.query(func.count(Worker.workerId)).filter(Worker.userId == user.userId, Worker.appId == app.appId).first() pageCount = int(math.ceil(float(count) / perPage)) # получаем список последних запросов lastWorkers = db_session.query(Worker).filter(Worker.userId == user.userId, Worker.appId == app.appId).order_by(desc(Worker.startDate)).offset(perPage * (page - 1)).limit(perPage) # определяем, какие воркеры уже умерли workers = [] alivedWorkers= [] for worker in lastWorkers: if worker.status == Worker.STATUS_ALIVE: alivedWorkers.append(worker) workers.append(worker) aliveThreadNames = ThredService.getAliveThreads() for worker in alivedWorkers: # определяем мертвые воркеры if not 'worker-' + str(worker.workerId) in aliveThreadNames: worker.status = Worker.STATUS_DIED db_session.add(worker) alivedWorkers.remove(worker) db_session.commit() # для живых воркеров загружаем таски if alivedWorkers: workerService = WorkerService(self.application.getResultPath()) for worker in alivedWorkers: workerService.setWorker(worker) worker.task = workerService.getTask() return workers, pageCount