Skip to content

Instantly share code, notes, and snippets.

@mydreambei-ai
Created September 7, 2018 05:16
Show Gist options
  • Save mydreambei-ai/ac97d8e136ccf94cca48cf11ae931c7f to your computer and use it in GitHub Desktop.
Save mydreambei-ai/ac97d8e136ccf94cca48cf11ae931c7f to your computer and use it in GitHub Desktop.
A simple threadpool using python
import socket
import threading
import queue
HOST = '0.0.0.0'
PORT = 50000
class Worker(threading.Thread):
def __init__(self, queue, **kwargs):
threading.Thread.__init__(self, **kwargs)
self.queue = queue
def run(self):
while 1:
try:
sock = self.queue.get()
sock.send(self.name.encode())
finally:
sock.close()
self.queue.task_done()
class ThreadPool(object):
def __init__(self, numbers=4, maxqueue = 100):
q = queue.Queue(maxsize=maxqueue)
self.queue = q
self.workers = {i: Worker(q) for i in range(numbers)}
def start(self):
for _, w in self.workers.items():
w.start()
def add(self,sock):
self.queue.put(sock, timeout=1)
def __str__(self):
pass
class Application(object):
def __init__(self, host, port, threadpool=ThreadPool):
self.host = host
self.port = port
self.server = self.setup()
self.pool = threadpool()
@staticmethod
def setup():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
return server
def bind(self, numbers=10):
self.server.bind((self.host, self.port))
self.server.listen(numbers)
def run(self):
self.pool.start()
try:
while 1:
sock, addr = self.server.accept()
try:
self.pool.add(sock)
except queue.Full:
sock.close()
finally:
self.server.close()
app = Application(HOST,PORT)
app.bind()
app.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment