def METHOD_NAME(self):
    servers = []
    ssl_args = {}
    if self.cfg.is_ssl:
        ssl_args = {"ssl_context": ssl_context(self.cfg)}
    for s in self.sockets:
        s.setblocking(1)
        pool = Pool(self.worker_connections)
        if self.server_class is not None:
            environ = base_environ(self.cfg)
            environ.update({
                "wsgi.multithread": True,
                "SERVER_SOFTWARE": VERSION,
            })
            server = self.server_class(
                s, application=self.wsgi, spawn=pool, log=self.log,
                handler_class=self.wsgi_handler, environ=environ,
                **ssl_args)
        else:
            hfun = partial(self.handle, s)
            server = StreamServer(s, handle=hfun, spawn=pool, **ssl_args)
            if self.cfg.workers > 1:
                server.max_accept = 1
        server.start()
        servers.append(server)
    while self.alive:
        self.notify()
        gevent.sleep(1.0)
    try:
        # Stop accepting requests
        for server in servers:
            if hasattr(server, 'close'):  # gevent 1.0
                server.close()
            if hasattr(server, 'kill'):  # gevent < 1.0
                server.kill()
        # Handle current requests until graceful_timeout
        ts = time.time()
        while time.time() - ts <= self.cfg.graceful_timeout:
            accepting = 0
            for server in servers:
                if server.pool.free_count() != server.pool.size:
                    accepting += 1
            # if no server is accepting a connection, we can exit
            if not accepting:
                return
            self.notify()
            gevent.sleep(1.0)
        # Force kill all active the handlers
        self.log.warning("Worker graceful timeout (pid:%s)", self.pid)
        for server in servers:
            server.stop(timeout=1)
    except Exception:
        pass