ThreadPool
- class ThreadPool(*args, **kwargs)
The GThreadPool
struct represents a thread pool.
A thread pool is useful when you wish to asynchronously fork out the execution of work and continue working in your own thread. If that will happen often, the overhead of starting and destroying a thread each time might be too high. In such cases reusing already started threads seems like a good idea. And it indeed is, but implementing this can be tedious and error-prone.
Therefore GLib provides thread pools for your convenience. An added advantage is, that the threads can be shared between the different subsystems of your program, when they are using GLib.
To create a new thread pool, you use new
.
It is destroyed by free
.
If you want to execute a certain task within a thread pool, use push
.
To get the current number of running threads you call get_num_threads
.
To get the number of still unprocessed tasks you call unprocessed
.
To control the maximum number of threads for a thread pool, you use
get_max_threads
. and set_max_threads
.
Finally you can control the number of unused threads, that are kept alive by GLib for future use.
The current number can be fetched with get_num_unused_threads
.
The maximum number can be controlled by get_max_unused_threads
and
set_max_unused_threads
. All currently unused threads
can be stopped by calling stop_unused_threads
.
Methods
- class ThreadPool
- free(immediate: bool, wait_: bool) None
Frees all resources allocated for
pool
.If
immediate
isTrue
, no new task is processed forpool
. Otherwisepool
is not freed before the last task is processed. Note however, that no thread of this pool is interrupted while processing a task. Instead at least all still running threads can finish their tasks before thepool
is freed.If @``wait_`` is
True
, this function does not return before all tasks to be processed (dependent onimmediate
, whether all or only the currently running) are ready. Otherwise this function returns immediately.After calling this function
pool
must not be used anymore.- Parameters:
immediate – should
pool
shut down immediately?wait – should the function wait for all tasks to be finished?
- get_max_idle_time() int
This function will return the maximum
interval
that a thread will wait in the thread pool for new tasks before being stopped.If this function returns 0, threads waiting in the thread pool for new work are not stopped.
Added in version 2.10.
- move_to_front(data: None) bool
Moves the item to the front of the queue of unprocessed items, so that it will be processed next.
Added in version 2.46.
- Parameters:
data – an unprocessed item in the pool
- push(data: None) bool
Inserts
data
into the list of tasks to be executed bypool
.When the number of currently running threads is lower than the maximal allowed number of threads, a new thread is started (or reused) with the properties given to
new()
. Otherwise,data
stays in the queue until a thread in this pool finishes its previous task and processesdata
.error
can beNone
to ignore errors, or non-None
to report errors. An error can only occur when a new thread couldn’t be created. In that casedata
is simply appended to the queue of work to do.Before version 2.32, this function did not return a success status.
- Parameters:
data – a new task for
pool
- set_max_idle_time(interval: int) None
This function will set the maximum
interval
that a thread waiting in the pool for new tasks can be idle for before being stopped. This function is similar to callingstop_unused_threads()
on a regular timeout, except this is done on a per thread basis.By setting
interval
to 0, idle threads will not be stopped.The default value is 15000 (15 seconds).
Added in version 2.10.
- Parameters:
interval – the maximum
interval
(in milliseconds) a thread can be idle
- set_max_threads(max_threads: int) bool
Sets the maximal allowed number of threads for
pool
. A value of -1 means that the maximal number of threads is unlimited. Ifpool
is an exclusive thread pool, setting the maximal number of threads to -1 is not allowed.Setting
max_threads
to 0 means stopping all work forpool
. It is effectively frozen untilmax_threads
is set to a non-zero value again.A thread is never terminated while calling
func
, as supplied bynew()
. Instead the maximal number of threads only has effect for the allocation of new threads inpush()
. A new thread is allocated, whenever the number of currently running threads inpool
is smaller than the maximal number.error
can beNone
to ignore errors, or non-None
to report errors. An error can only occur when a new thread couldn’t be created.Before version 2.32, this function did not return a success status.
- Parameters:
max_threads – a new maximal number of threads for
pool
, or -1 for unlimited
- set_max_unused_threads(max_threads: int) None
Sets the maximal number of unused threads to
max_threads
. Ifmax_threads
is -1, no limit is imposed on the number of unused threads.The default value is 2.
- Parameters:
max_threads – maximal number of unused threads
- stop_unused_threads() None
Stops all currently unused threads. This does not change the maximal number of unused threads. This function can be used to regularly stop all unused threads e.g. from
timeout_add()
.