Simple subclass wrapper around `threading.Thread` to get the return value from a thread in python. Exact same interface as `threading.Thread`! 🌟 Star this repo if you found it useful! 🌟
Project description
Python API
Quickstart
Installing the save_thread_result module:
pip3 install -U save-thread-result     # MacOS/Linux
pip  install -U save-thread-result     # Windows
# if that doesn't work:
python3 -m pip install -U save-thread-result     # MacOS/Linux
python  -m pip install -U save-thread-result     # Windows
Using the ThreadWithResult class from the save_thread_result module:
from save_thread_result import ThreadWithResult
# As of Release 0.0.3, you can also specify values for
# `group`, `name`, and `daemon` if you want to set those
# values manually.
thread = ThreadWithResult(
    target = my_function,
    args   = (my_function_arg1, my_function_arg2, ...)
    kwargs = {my_function_kwarg1: kwarg1_value, my_function_kwarg2: kwarg2_value, ...}
)
thread.start()
thread.join()
if getattr(thread, 'result', None):
    print(thread.result)
else:
    # thread.result attribute not set - something caused
    # the thread to terminate BEFORE the thread finished
    # executing the function passed in through the
    # `target` argument
    print('ERROR! Something went wrong while executing this thread, and the function you passed in did NOT complete!!')
Reading the documentation for more information:
from save_thread_result import ThreadWithResult
help(ThreadWithResult)
Short explanation
This module uses a threading.Thread subclass ThreadWithResult that saves the result of a thread (from threading built-in module in the Python Standard library) as its result attribute - i.e. after the thread finishes running, call thread.result to get the return value from the function that ran on that thread.
Examples
Dummy example:
from save_thread_result import ThreadWithResult
import time, random, threading
def function_to_thread(n):
    count = 0
    while count < 3:
            print(f'Still running {threading.current_thread().name}...')
            count +=1
            time.sleep(3)
    result = random.random()
    print(f'Return value of {threading.current_thread().name} should be: {result}')
    return result
def main():
    thread1 = ThreadWithResult(target=function_to_thread, args=(1,))
    thread2 = ThreadWithResult(target=function_to_thread, args=(2,))
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    print(f'The `result` attribute of {thread1.name} is: {thread1.result}')
    print(f'The `result` attribute of {thread2.name} is: {thread2.result}')
main()
More information
Sources I looked at before creating the custom class
- Return value from thread
- Threading in python: retrieve return value when using target= [duplicate]
- How to get the return value from a thread in python?
- Using Python Threading and Returning Multiple Results (Tutorial)
- How to get the return value from a thread using python
- How to manage python threads results?
- How to obtain the results from a pool of threads in python?
- Google search
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for save-thread-result-0.1.1.post1.tar.gz
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 | 46a214c1e204a8c4f92d293d0c121bb7bd38db98d79dc9b9384edce9dfbf0cbd | |
| MD5 | cad5e4bb9e679bbc4bd86418d623dc19 | |
| BLAKE2b-256 | 6d45c05c254fb5e074f08a66882a9b0524509bf61a9c4d2b32409bf5ba13b84d | 
Hashes for save_thread_result-0.1.1.post1-py3-none-any.whl
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 | 8f78b4eac2e49b0978c86d2a0d5465dda5ec2f47c94c202b323e57d74eca3a34 | |
| MD5 | 6a01e6f36da71f2c2200933a694f2b4c | |
| BLAKE2b-256 | af6dfbf21b350439dc05bb7c8ed8fccd35f9be7186c1621cf8a08a6f1e2626bb |