在Python中,获取多线程返回的数据可以通过以下几种方式实现:
自定义线程类
创建一个继承自`threading.Thread`的类,并在`run`方法中执行任务,同时保存结果到线程的属性中。通过`get_result`方法可以获取线程执行的结果。
import threadingclass MyThread(threading.Thread):def __init__(self, func, args):super(MyThread, self).__init__()self.func = funcself.args = argsself.result = Nonedef run(self):self.result = self.func(*self.args)def get_result(self):return self.result
使用`concurrent.futures`模块
`concurrent.futures`模块提供了`ThreadPoolExecutor`类,可以方便地提交任务并获取返回值。
import concurrent.futuresdef task():执行任务并返回结果return resultwith concurrent.futures.ThreadPoolExecutor() as executor:future = executor.submit(task)result = future.result() 阻塞等待任务完成并获取结果
使用队列(Queue)
创建一个队列,将任务参数放入队列中,然后创建多个线程从队列中取出参数并执行任务。任务完成后,可以将结果放回队列中供主线程或其他线程获取。
from queue import Queueimport threadingdef worker(q):while True:i = q.get()try:执行任务print('执行的参数', i)q.task_done()except Exception as e:logging.warning(str(i) + str(e.message) + str(e.args))创建队列q = Queue()for i in range(6):q.put(i)创建并启动工作线程threads = []for _ in range(2):t = threading.Thread(target=worker, args=(q,))t.daemon = Truet.start()等待队列清空q.join()
选择合适的方法取决于具体的应用场景和需求。

