Skip to content

Instantly share code, notes, and snippets.

@beledouxdenis
Created January 3, 2020 15:26
Show Gist options
  • Save beledouxdenis/4f00e1261a84e36cefb1e752635e49a1 to your computer and use it in GitHub Desktop.
Save beledouxdenis/4f00e1261a84e36cefb1e752635e49a1 to your computer and use it in GitHub Desktop.
Multi-threaded HTTP(S) server
#!/usr/bin/env python3
import threading
import time
from http.server import HTTPServer, BaseHTTPRequestHandler
from socketserver import ThreadingMixIn
USE_HTTPS = False
if USE_HTTPS:
import ssl
HTTPS_KEY = '/etc/ssl/private/ssl-cert-snakeoil.key'
HTTPS_CERT = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
time.sleep(5)
self.wfile.write(b'Hello world\t' + threading.currentThread().getName().encode() + b'\t' + str(threading.active_count()).encode() + b'\n')
class ThreadingSimpleServer(ThreadingMixIn, HTTPServer):
pass
def run():
server = ThreadingSimpleServer(('0.0.0.0', 8000), Handler)
if USE_HTTPS:
server.socket = ssl.wrap_socket(server.socket, keyfile=HTTPS_KEY, certfile=HTTPS_CERT, server_side=True)
print('Starting server...')
server.serve_forever()
if __name__ == '__main__':
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment