Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def Main():
- table_proc = dict() # таблица процессов
- lock = Lock()
- # создание классов-потоков
- creator = Creator(... lock, table_proc)
- creator.start() # запуск создателя
- killer = Killer(...lock, table_proc)
- killer.start() # запуск киллера
- creator.join() # main() ждет смерти этого потока
- killer.join() # main() ждет смерти и этого потока
- # Тестовая функция процесс порождаемый создателем
- def New_Func(name):
- while True:
- print("I'm %s my PID: %i") % (name, os.getpid())
- time.sleep(2)
- print "NO MORE "
- if __name__ == '__main__':
- Main() # начало программы
- def create_proc(self, body):
- p = Process(target=New_Func, args=(body["name"],))
- self.lock.acquire()
- try:
- self.table_proc[body["name"]] = p
- except Exception as inst1:
- print(inst) #обработка исключения
- self.lock.release()
- return False
- pass
- finally:
- self.lock.release()
- p.daemon = True
- p.start()
- return True
- def kill(self, body):
- self.lock.acquire()
- try:
- self.table_proc[body["name"]].terminate() из таблицы
- #os.kill(self.table_proc[body["name"]].pid, 9)
- #os.kill(self.table_proc[body["name"]].pid, os.SIGTERM)
- #os.killpg(os.getpgid(self.table_proc[body["name"]]), os.SIGTERM)
- #todo УДАЛИТЬ из таблицы задач
- except Exception as inst1:
- print(inst1)
- self.lock.release
- return False
- pass
- finally:
- self.lock.release()
- return True
- def kill(self, body):
- self.lock.acquire() # блокировка разделяемого объекта
- try:
- self.table_proc[body["name"]].terminate() #остановка процесса
- self.table_proc[body["name"]].join() # ждем освобождение ресурсов ("анти-зомбарин")
- del self.table_proc[body["name"]] # убить процесс из таблицы
- except Exception as inst1:
- print(inst1)
- self.lock.release
- return False
- pass
- finally:
- self.lock.release() # в любом случае освобождаем объект от блокировки
- pass
- return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement