| 51 | ) |
| 52 | |
| 53 | def __init__(self, app): |
| 54 | os.environ["SERVER_SOFTWARE"] = SERVER_SOFTWARE |
| 55 | |
| 56 | self._num_workers = None |
| 57 | self._last_logged_active_worker_count = None |
| 58 | self.log = None |
| 59 | |
| 60 | # Signal queue - SimpleQueue is reentrant-safe for signal handlers |
| 61 | self.SIG_QUEUE = queue.SimpleQueue() |
| 62 | |
| 63 | self.setup(app) |
| 64 | |
| 65 | self.pidfile = None |
| 66 | self.systemd = False |
| 67 | self.worker_age = 0 |
| 68 | self.reexec_pid = 0 |
| 69 | self.master_pid = 0 |
| 70 | self.master_name = "Master" |
| 71 | |
| 72 | # Dirty arbiter process |
| 73 | self.dirty_arbiter_pid = 0 |
| 74 | self.dirty_arbiter = None |
| 75 | self.dirty_pidfile = None # Well-known location for orphan detection |
| 76 | |
| 77 | # Control socket server |
| 78 | self._control_server = None |
| 79 | |
| 80 | # Stats tracking |
| 81 | self._stats = { |
| 82 | 'start_time': None, |
| 83 | 'workers_spawned': 0, |
| 84 | 'workers_killed': 0, |
| 85 | 'reloads': 0, |
| 86 | } |
| 87 | |
| 88 | cwd = util.getcwd() |
| 89 | |
| 90 | args = sys.argv[:] |
| 91 | args.insert(0, sys.executable) |
| 92 | |
| 93 | # init start context |
| 94 | self.START_CTX = { |
| 95 | "args": args, |
| 96 | "cwd": cwd, |
| 97 | 0: sys.executable |
| 98 | } |
| 99 | |
| 100 | def _get_num_workers(self): |
| 101 | return self._num_workers |