Skip to content

Instantly share code, notes, and snippets.

@paulwinex
Last active October 16, 2017 16:44
Show Gist options
  • Save paulwinex/5542bccc2e313a0751144275ee4f877f to your computer and use it in GitHub Desktop.
Save paulwinex/5542bccc2e313a0751144275ee4f877f to your computer and use it in GitHub Desktop.
class TasksPool(QObject):
# сигнал для старта следующей задачи или просто за запуска процесса просчета
startNextTaskSignal = Signal()
# сигнал окончания всех задач
allTasksCompleteSignal = Signal()
def __init__(self):
super()
# список задач
self.tasks_pool = []
# процесс, объявление атрибута
self.process = None
# этот окончание сигнал конектим на запуск следующей задачи
self.startNextTaskSignal.connect(self.execute_task)
# это сигнал окончания очереди задач
self.alltasksCompleteSignal.connect(self.tasks_copmlete)
def add_task(self, cmd):
# основная фкнция запускающаа ОДИН процесс используя таску из начала очереди
# фукнция добавления задачи в очередь
# просто добавляем в список
self.tasks_pool.append(cmd)
# сигналим что есть новые задачи, надо стартовать
self.startNextTaskSignal.emit()
def execute_task(self):
# Если процесс уже запущен то ничего не делаем
if self.process and self.process.isOpen():
return
# если тасков больше нет то сигналим что все таски завершены (может быть ложное срабатывание если там и было пусто)
if not self.tasks:
self.allTasksCompleteSignal.emit()
# забираем таск из начала очереди удаляя из списка
next_task = self.tasks_pool.pop(0)
# создаем процесс
self.process = QProcess()
# коннектим завершение процесса на старт следующей таски
self.process.finished.conenct(self.startNextTaskSignal.emit)
# поехали
self.process.start(next_task)
def tasks_copmlete(self):
# таски закончились
print 'ALL TASKS COMPLETE'
inst = TasksPool()
inst.add_task('cmd.exe')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment