在Python中,获取多线程返回的数据可以通过以下几种方式实现:
自定义线程类
创建一个继承自`threading.Thread`的类,并在`run`方法中执行任务,同时保存结果到线程的属性中。通过`get_result`方法可以获取线程执行的结果。
import threading
class MyThread(threading.Thread):
def __init__(self, func, args):
super(MyThread, self).__init__()
self.func = func
self.args = args
self.result = None
def run(self):
self.result = self.func(*self.args)
def get_result(self):
return self.result
使用`concurrent.futures`模块
`concurrent.futures`模块提供了`ThreadPoolExecutor`类,可以方便地提交任务并获取返回值。
import concurrent.futures
def task():
执行任务并返回结果
return result
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(task)
result = future.result() 阻塞等待任务完成并获取结果
使用队列(Queue)
创建一个队列,将任务参数放入队列中,然后创建多个线程从队列中取出参数并执行任务。任务完成后,可以将结果放回队列中供主线程或其他线程获取。
from queue import Queue
import threading
def 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 = True
t.start()
等待队列清空
q.join()
选择合适的方法取决于具体的应用场景和需求。