revamped how we close servers

This commit is contained in:
Abubakar Abid 2021-12-21 13:04:12 -06:00
parent c927b778fd
commit d03c3a4bfe
2 changed files with 30 additions and 46 deletions

View File

@ -588,6 +588,7 @@ class Interface:
self.auth = auth self.auth = auth
self.auth_message = auth_message self.auth_message = auth_message
self.show_tips = show_tips self.show_tips = show_tips
self.show_error = show_error
# Request key for encryption # Request key for encryption
if self.encrypt: if self.encrypt:
@ -599,13 +600,14 @@ class Interface:
self.enable_queue = enable_queue self.enable_queue = enable_queue
# Launch local flask server # Launch local flask server
server_port, path_to_local_server, app, thread = networking.start_server( server_port, path_to_local_server, app, thread, server = networking.start_server(
self, server_name, server_port, self.auth) self, server_name, server_port, self.auth)
self.local_url = path_to_local_server self.local_url = path_to_local_server
self.server_port = server_port self.server_port = server_port
self.status = "RUNNING" self.status = "RUNNING"
self.server = app self.server = server
self.show_error = show_error self.server_app = app
self.server_thread = thread
# Count number of launches # Count number of launches
utils.launch_counter() utils.launch_counter()
@ -705,18 +707,13 @@ class Interface:
Closes the Interface that was launched. This will close the server and free the port. Closes the Interface that was launched. This will close the server and free the port.
""" """
try: try:
if self.share_url: self.server.shutdown()
requests.get("{}/shutdown".format(self.share_url)) self.server_thread.join()
if verbose: print("Closing server running on port: {}".format(self.server_port))
print("Closing Gradio server on port {}...".format(self.server_port)) except AttributeError: # can't close if not running
elif self.local_url: pass
requests.get("{}shutdown".format(self.local_url)) except OSError: # sometimes OSError is thrown when shutting down
if verbose: pass
print("Closing Gradio server on port {}...".format(self.server_port))
else:
pass # server not running
except (requests.ConnectionError, ConnectionResetError):
pass # server is already closed
def integrate(self, comet_ml=None, wandb=None, mlflow=None): def integrate(self, comet_ml=None, wandb=None, mlflow=None):
""" """

View File

@ -2,33 +2,31 @@
Defines helper methods useful for setting up ports, launching servers, and handling `ngrok` Defines helper methods useful for setting up ports, launching servers, and handling `ngrok`
""" """
import os import csv
import socket import datetime
import threading
from flask import Flask, request, session, jsonify, abort, send_file, render_template, redirect from flask import Flask, request, session, jsonify, abort, send_file, render_template, redirect
from flask_cachebuster import CacheBuster from flask_cachebuster import CacheBuster
from flask_login import LoginManager, login_user, current_user, login_required from flask_login import LoginManager, login_user, current_user, login_required
from flask_cors import CORS from flask_cors import CORS
import threading from functools import wraps
import pkg_resources import inspect
import datetime import io
import time
import json import json
import urllib.request
from shutil import copyfile
import requests
import sys
import csv
import logging import logging
from gradio.tunneling import create_tunnel import os
import pkg_resources
import requests
import socket
import sys
import threading
import time
import traceback
import urllib.request
from werkzeug.security import safe_join
from werkzeug.serving import make_server
from gradio import encryptor from gradio import encryptor
from gradio import queue from gradio import queue
from functools import wraps from gradio.tunneling import create_tunnel
import io
import inspect
import traceback
from werkzeug.security import safe_join
# By default, the http server will try to open on port 7860. If not available, 7861, 7862, etc. # By default, the http server will try to open on port 7860. If not available, 7861, 7862, etc.
INITIAL_PORT_VALUE = int(os.getenv('GRADIO_SERVER_PORT', "7860")) INITIAL_PORT_VALUE = int(os.getenv('GRADIO_SERVER_PORT', "7860"))
@ -464,24 +462,13 @@ def start_server(interface, server_name=None, server_port=None, auth=None, ssl=N
app.queue_thread.start() app.queue_thread.start()
if interface.save_to is not None: if interface.save_to is not None:
interface.save_to["port"] = port interface.save_to["port"] = port
# app_kwargs = {"port": port, "host": server_name}
# if ssl:
# app_kwargs["ssl_context"] = ssl
# thread = threading.Thread(target=app.run,
# kwargs=app_kwargs,
# daemon=True)
# thread.start()
app_kwargs = {"app": app, "port": port, "host": server_name} app_kwargs = {"app": app, "port": port, "host": server_name}
if ssl: if ssl:
app_kwargs["ssl_context"] = ssl app_kwargs["ssl_context"] = ssl
server = make_server(**app_kwargs) server = make_server(**app_kwargs)
def run_forever(): thread = threading.Thread(target=server.serve_forever, daemon=True)
server.serve_forever()
thread = threading.Thread(target=run_forever, daemon=True)
thread.start() thread.start()
return port, path_to_local_server, app, thread, server return port, path_to_local_server, app, thread, server
# return port, path_to_local_server, app, thread
def get_state(): def get_state():
return session.get("state") return session.get("state")