You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将线程执行结果追加至列表?附Python代码及运行结果

如何将线程执行结果追加到列表中

你的现有代码是把Thread对象添加到了threads列表里,所以最后打印的是线程实例而不是执行结果。要获取线程的返回值并收集到列表中,这里有几种实用的方法:

方法1:使用线程安全的共享列表

多个线程同时操作同一个列表时,可能会出现竞态条件,所以我们可以用threading.Lock来保证操作的原子性。修改后的代码如下:

import threading

# 定义共享结果列表和线程锁
results = []
lock = threading.Lock()

def worker(num):
    """thread worker function"""
    result = f'{{Worker: {num}}}'
    print(result)
    # 加锁后修改共享列表,避免多线程冲突
    with lock:
        results.append(result)

threads = []
for i in range(5):
    t = threading.Thread(target=worker, args=(i,))
    threads.append(t)
    t.start()

# 必须等待所有线程执行完成,再打印结果
for t in threads:
    t.join()

print("线程执行结果:")
print(results)

运行后会输出:

{Worker: 0}
{Worker: 1}
{Worker: 2}
{Worker: 3}
{Worker: 4}
线程执行结果:
['{Worker: 0}', '{Worker: 1}', '{Worker: 2}', '{Worker: 3}', '{Worker: 4}']

方法2:用concurrent.futures.ThreadPoolExecutor(更简洁)

如果你的Python版本是3.2及以上,推荐用concurrent.futures模块,它会自动帮你管理线程生命周期和结果收集,代码更清爽:

from concurrent.futures import ThreadPoolExecutor

def worker(num):
    """thread worker function"""
    result = f'{{Worker: {num}}}'
    print(result)
    return result

# 创建线程池,最多同时运行5个线程
with ThreadPoolExecutor(max_workers=5) as executor:
    # 批量提交任务并按输入顺序收集结果
    results = list(executor.map(worker, range(5)))

print("线程执行结果:")
print(results)

这个方法不需要手动处理锁和线程的启动/等待,executor.map会帮你搞定一切,非常适合简单的结果收集场景。

方法3:自定义Thread子类保存结果

如果需要对线程行为做更多自定义,可以继承threading.Thread,在子类里保存返回值:

import threading

class ResultThread(threading.Thread):
    def __init__(self, num):
        super().__init__()
        self.num = num
        self.result = None

    def run(self):
        """重写run方法,执行线程逻辑并保存结果"""
        self.result = f'{{Worker: {self.num}}}'
        print(self.result)

threads = []
for i in range(5):
    t = ResultThread(i)
    threads.append(t)
    t.start()

# 等待所有线程完成后,从每个线程实例中提取结果
results = []
for t in threads:
    t.join()
    results.append(t.result)

print("线程执行结果:")
print(results)

这种方式适合需要扩展线程功能的场景,每个线程实例会独立保存自己的执行结果,最后统一收集即可。

内容的提问来源于stack exchange,提问作者meh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:24:55