Search code examples
pythonmultithreadingmultiprocessingreturnreturn-value

How to get multiple return values from a threaded function?


Have called an external function which returns multiple values.

def get_name(full_name):
   # you code
   return first_name, last_name

In simple function call, I can get the results.

from names import get_name

first, last= get_name(full_name)

But I need to use threading for the call to get the result values for the first and last variables. I failed in using a simple threading call.

first, last= Threading.thread(get_name, args= (full_name,)

Please help me to get the return values of the function call


Solution

  • You should use a queue for retrieve data from threads, here you have an example using a wrapper to store values from the functions into a queue:

    import threading
    import queue
    
    my_queue = queue.Queue()
    
    def storeInQueue(f):
      def wrapper(*args):
        my_queue.put(f(*args))
      return wrapper
    
    
    @storeInQueue
    def get_name(full_name):
       return full_name, full_name
    
    
    
    t = threading.Thread(target=get_name, args = ("foo", ))
    t.start()
    
    my_data = my_queue.get()
    print(my_data)
    

    Here you have the live working example