def run(self): self.process_groups = {} # clear self.stop_groups = None # clear events.clear() self.make_job_handler() # container try: for config in self.options.process_group_configs: self.add_process_group(config) self.options.process_environment() self.options.openhttpservers(self) self.options.setsignals() if not self.options.nodaemon and self.options.first: try: self.options.daemonize() except NotImplementedError: pass # writing pid file needs to come *after* daemonizing or pid # will be wrong self.options.write_pidfile() self.runforever() except: raise finally: self.options.cleanup() if self.options.job_handler: self.options.job_handler.terminate()
def run(self): self.process_groups = {} # clear self.stop_groups = None # clear # 清除全局变量callbacks events.clear() try: # class ProcessConfig(Config) ProcessGroupConfig for config in self.options.process_group_configs: # 将process实例添加到自己的进程组中,这一步老复杂了 self.add_process_group(config) # {'st': <<class 'supervisor.process.ProcessGroup'> instance at 140080285716112 named st >} print(self.process_groups) self.options.process_environment() # 更新环境变量 self.options.openhttpservers(self) # self.options.httpservers # [({'username': None, 'name': None, 'family': 1, 'section': 'unix_http_server', 'chmod': 448, 'chown': (-1, -1), # 'file': '/tmp/supervisor.sock', 'password': None}, # < supervisor.http.supervisor_af_unix_http_server at 0x7fb0684bffc8 >)] # openhttpservers 设置了socket_map # 设置信号处理函数 # def receive(self, sig, frame): # # 信号量不能重复? # if sig not in self._signals_recvd: # self._signals_recvd.append(sig) self.options.setsignals() # 如果是true,supervisord进程将在前台运行 # 我先把它给关掉,因为不运行在桌面无法进行调试 # if (not self.options.nodaemon) and self.options.first: # self.options.daemonize() # writing pid file needs to come *after* daemonizing or pid # will be wrong 将进程号写进进程文件 self.options.write_pidfile() self.runforever() finally: self.options.cleanup()
def on_stopping(self, event): """ Called when Supervisor is STOPPING. This method stops the Supvisors main loop. """ self.logger.warn('local supervisord is STOPPING') # unsubscribe from events events.clear() # force Supervisor to close HTTP servers self.info_source.close_httpservers() # stop and join the main loop self.main_loop.stop() # close zmq sockets self.supvisors.zmq.close() # finally, close logger self.logger.close()
def on_stopping(self, event): """ Called when Supervisor is STOPPING. This method stops the Supvisors main loop. """ self.logger.warn('local supervisord is STOPPING') # force Supervisor to close HTTP servers # this will prevent any pending XML-RPC request to block the main loop self.info_source.close_httpservers() # stop the main loop self.logger.info('request to stop main loop') self.main_loop.stop() self.logger.info('end of main loop') # close zmq sockets self.supvisors.zmq.close() # unsubscribe from events events.clear() # finally, close logger self.logger.close()
def run(self): self.process_groups = {} # clear self.stop_groups = None # clear events.clear() try: for config in self.options.process_group_configs: self.add_process_group(config) self.options.openhttpservers(self) self.options.setsignals() if (not self.options.nodaemon) and self.options.first: self.options.daemonize() # writing pid file needs to come *after* daemonizing or pid # will be wrong self.options.write_pidfile() self.runforever() finally: self.options.cleanup()
def run(self): self.process_groups = {} # clear self.stop_groups = None # clear events.clear() try: for config in self.options.process_group_configs: self.add_process_group(config) self.options.process_environment() self.options.openhttpservers(self) self.options.setsignals() if (not self.options.nodaemon) and self.options.first: self.options.daemonize() # writing pid file needs to come *after* daemonizing or pid # will be wrong self.options.write_pidfile() self.runforever() finally: self.options.cleanup()
def tearDown(self): from supervisor.events import clear clear()
def test_clear(self): from supervisor import events events.callbacks[:] = [(None, None)] events.clear() self.assertEqual(events.callbacks, [])
def setUp(self): from supervisor.events import clear clear()