Python flera trådar med return värde

Permalänk

Python flera trådar med return värde

Jag behöver få return värdet när jag kör flera trådar. Ska man använda typ get() med tråd namnet för att få värdet eller hur får jag värdet?

def DEF_TEST(): time.sleep(0.5) a = 1 return a threads = [] x = 0 a = 0 for _ in range(5): time.sleep(0.2) t = threading.Thread(target=DEF_TEST) threads.append(t) t.start() for _ in threads: _.join() print(x) sys.exit()

Så jag behöver sätta "x = x + a" någonstans och få x = 5 i slutet. Någon som vet hur jag hämtar a?

Permalänk

Inget jag ännu provat, men på edureka finns en tråd (No pun intended) om detta.

Visa signatur

// Lars Lindehaven

Permalänk
Medlem
Permalänk
Medlem

Du kan använda queue.Queue:

import time import threading from queue import Queue def def_test(queue): time.sleep(0.5) a = 1 queue.put(a) if __name__ == '__main__': threads = [] queue = Queue() for _ in range(5): time.sleep(0.2) tread = threading.Thread(target=def_test, args=(queue,)) threads.append(tread) tread.start() for thread in threads: thread.join() x = sum(queue.queue) print(x)

Men bättre ThreadPoolExecutor från modul concurrent.futures

import time from concurrent.futures import ThreadPoolExecutor def def_test(): time.sleep(0.5) a = 1 return a if __name__ == '__main__': threads = [] number_of_threads = 5 x = 0 with ThreadPoolExecutor(max_workers=number_of_threads) as executor: for feature in [executor.submit(def_test) for _ in range(number_of_threads)]: x += feature.result() print(x)