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

为何ThreadPoolExecutor提交的任务未并发反而按顺序执行?

问题原因与解决方案

你的代码根本没用到线程池的异步执行能力,核心错误出在任务提交的方式上:

  • 你写的tp.submit(m1())是直接在主线程中调用了m1函数,把函数执行后的返回值(这里是None)传给了submit方法,而不是把函数本身提交给线程池去异步执行。
  • 这就导致程序会先同步跑完m1的整个循环,再跑m2,最后跑m3,完全是主线程里的串行执行,线程池的max_workers=2根本没生效。

正确写法

把函数调用的括号去掉,直接传递函数对象给submit:

import time
from concurrent.futures import ThreadPoolExecutor

def m1():
    for i in range(1,10):
        print(f"m1 i={i}")
        time.sleep(0.5)

def m2():
    for i in range(1, 10):
        print(f"m2 i={i}")
        time.sleep(0.5)

def m3():
    for i in range(1,10):
        print(f"m3 i={i}")
        time.sleep(0.5)

with ThreadPoolExecutor(max_workers=2) as tp:
    tp.submit(m1)  # 不带括号,传函数对象
    tp.submit(m2)
    tp.submit(m3)

正确运行效果

修改后,线程池会先启动两个线程同时执行m1和m2,它们的输出会交替出现;当其中一个任务完成后,线程池才会启动第三个线程执行m3,符合你对多线程异步执行的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:57:13