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

如何修复ThreadPoolExecutor仅返回最后一个关键词执行结果的问题

问题原因及修复方案

核心问题梳理

  • 任务提交逻辑错误:executor.submit() 每次仅支持提交单个任务,你的代码仅提交了1次任务,直接把完整的keyword_list作为参数传给了查询方法,而非为每个关键词单独提交处理任务。
  • 方法名拼写错误:类中定义的查询方法名为find_kewword(多输入了一个w),调用时写的是find_keyword,属于笔误会导致方法找不到报错。
  • 线程安全隐患:requests.Session 不是线程安全的,多线程共用同一个Session实例会导致请求、响应数据错乱,这也是你只能拿到最后一个关键词对应结果的核心诱因。

修复后的代码示例

首先修正类的实现,避免共用非线程安全的Session:

import requests
from concurrent.futures import ThreadPoolExecutor

class AllFind():
    # 移除全局Session初始化,每个请求单独创建Session保证线程安全
    def find_keyword(self, keyword):
        session = requests.Session()
        url = "https://xxxxxxxx.yy"
        params = {
            "keyword" : keyword,
            "version" : 5,
        }
        res = session.get(url, params=params)
        res_count = res.json().get("count")
        session.close()
        return res_count

然后修正线程池调用逻辑,为每个关键词单独提交任务:

obj = AllFind()
keyword_list = [1,23,4,5,6]
results = []
with ThreadPoolExecutor(max_workers=5) as executor:
    # 循环为每个关键词提交任务
    tasks = [executor.submit(obj.find_keyword, kw) for kw in keyword_list]
    # 按顺序收集所有任务的返回结果
    for future in tasks:
        results.append(future.result())
# 最终results顺序和keyword_list顺序一一对应
print(results)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 23:27:08