cheroot.workers.threadpool module#

A thread-based worker pool.

class cheroot.workers.threadpool.ThreadPool(server, min=10, max=-1, accepted_queue_size=-1, accepted_queue_timeout=10)#

Bases: object

A Request Queue for an HTTPServer which pools threads.

ThreadPool objects must provide min, get(), put(obj), start() and stop(timeout) attributes.


Clear self._threads and yield all joinable threads.

static _force_close(conn)#

Spawn new worker threads (not above self.max).

property idle#

Number of worker threads which are idle. Read-only.


Put request into queue.

obj (HTTPConnection): HTTP connection

waiting to be processed

property qsize#

Return the queue size.


Kill off worker threads (not below self.min).


Start the pool of threads.


RuntimeError – if the pool is already started


Terminate all worker threads.


timeout (int): time to wait for threads to stop gracefully

class cheroot.workers.threadpool.WorkerThread(server)#

Bases: Thread

Thread which continuously polls a Queue for Connection objects.

Due to the timing issues of polling a Queue, a WorkerThread does not check its own ‘ready’ flag after it has started. To stop the thread, it is necessary to stick a _SHUTDOWNREQUEST object onto the Queue (one for each running WorkerThread).


Process incoming HTTP connections in an infinite loop.

Retrieves incoming connections from thread pool, processing them one by one.


SystemExit – on the internal requests to stop the server instance

conn = None#

The current connection pulled off the Queue, or None.

ready = False#

A simple flag for the calling server to know when this thread has begun polling the Queue.


Set up incoming HTTP connection processing loop.

This is the thread’s entry-point. It performs lop-layer exception handling and interrupt processing. KeyboardInterrupt and SystemExit bubbling up from the inner-layer code constitute a global server interrupt request. When they happen, the worker thread exits.


BaseException – when an unexpected non-interrupt exception leaks from the inner layers

# noqa: DAR401 KeyboardInterrupt SystemExit

server = None#

The HTTP Server which spawned this thread, and which owns the Queue and is placing active connections into it.