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_dead_threads()
_clear_threads()

Clear self._threads and yield all joinable threads.

static _force_close(conn)
_spawn_worker()
grow(amount)

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

property idle

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

put(obj)

Put request into queue.

Args:
obj (HTTPConnection): HTTP connection

waiting to be processed

property qsize

The queue size.

shrink(amount)

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

Ask up to amount more threads to shut down. Threads that earlier calls already asked to shut down count as gone, as in idle.

start()

Start the pool of threads.

Raises:

RuntimeError – if the pool is already started

stop(timeout=5)

Terminate all worker threads.

Args:

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_connections_until_interrupted()

Process incoming HTTP connections in an infinite loop.

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

Raises:

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.

run()

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.

Raises:

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.