Guest User

Untitled

a guest
Jan 18th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. def Main():
  2. table_proc = dict() # таблица процессов
  3. lock = Lock()
  4.  
  5. # создание классов-потоков
  6. creator = Creator(... lock, table_proc)
  7. creator.start() # запуск создателя
  8.  
  9. killer = Killer(...lock, table_proc)
  10. killer.start() # запуск киллера
  11.  
  12. creator.join() # main() ждет смерти этого потока
  13. killer.join() # main() ждет смерти и этого потока
  14.  
  15.  
  16. # Тестовая функция процесс порождаемый создателем
  17. def New_Func(name):
  18. while True:
  19. print("I'm %s my PID: %i") % (name, os.getpid())
  20. time.sleep(2)
  21. print "NO MORE "
  22.  
  23.  
  24. if __name__ == '__main__':
  25. Main() # начало программы
  26.  
  27. def create_proc(self, body):
  28. p = Process(target=New_Func, args=(body["name"],))
  29. self.lock.acquire()
  30. try:
  31. self.table_proc[body["name"]] = p
  32. except Exception as inst1:
  33. print(inst) #обработка исключения
  34. self.lock.release()
  35. return False
  36. pass
  37. finally:
  38. self.lock.release()
  39.  
  40. p.daemon = True
  41. p.start()
  42. return True
  43.  
  44. def kill(self, body):
  45. self.lock.acquire()
  46. try:
  47. self.table_proc[body["name"]].terminate() из таблицы
  48. #os.kill(self.table_proc[body["name"]].pid, 9)
  49. #os.kill(self.table_proc[body["name"]].pid, os.SIGTERM)
  50. #os.killpg(os.getpgid(self.table_proc[body["name"]]), os.SIGTERM)
  51. #todo УДАЛИТЬ из таблицы задач
  52. except Exception as inst1:
  53. print(inst1)
  54. self.lock.release
  55. return False
  56. pass
  57. finally:
  58. self.lock.release()
  59. return True
  60.  
  61. def kill(self, body):
  62. self.lock.acquire() # блокировка разделяемого объекта
  63. try:
  64. self.table_proc[body["name"]].terminate() #остановка процесса
  65. self.table_proc[body["name"]].join() # ждем освобождение ресурсов ("анти-зомбарин")
  66. del self.table_proc[body["name"]] # убить процесс из таблицы
  67. except Exception as inst1:
  68. print(inst1)
  69. self.lock.release
  70. return False
  71. pass
  72. finally:
  73. self.lock.release() # в любом случае освобождаем объект от блокировки
  74. pass
  75. return True
Add Comment
Please, Sign In to add comment