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

Python多线程运行同一函数无并行加速效果,如何实现线程同时运行?

原因分析
  • 首先你的多线程代码逻辑本身就是串行执行的:你在每个线程start()后立刻调用了join(),这会阻塞主线程直到当前子线程完全运行结束,才会启动下一个线程,本质和单线程执行顺序完全一致,自然不会有速度提升。
  • 条件判断存在语法错误:if choice == 's' or 'S'的写法永远返回True,因为非空字符串'S'的布尔值为真,所以你输入m的时候根本不会进入多线程分支,永远跑的是单线程逻辑。正确写法为if choice.lower() == 's'。
  • 函数逻辑存在越界隐患:fib_caller里固定写了循环10次,但你多线程分支传入的是长度为2的列表切片,执行时会直接报索引越界错误。同时你用了list作为变量名,覆盖了Python内置的list类型,还滥用全局变量,写法极不规范。
  • CPython全局解释器锁(GIL)限制:就算你把上述代码逻辑都改对,计算密集型的斐波那契任务用threading多线程也无法实现并行。因为CPython的GIL会保证同一时间只有一个线程能执行Python字节码,多线程在计算密集型场景下只会有GIL切换的额外开销,速度甚至可能比单线程更慢。计算密集型任务要实现多核并行,应该改用multiprocessing多进程模块,每个进程拥有独立的解释器和GIL,可以跑在不同CPU核心上。
修正后的可运行示例
import multiprocessing, time

def fib(n):
    if n <= 1:
        return 1
    return fib(n - 1) + fib(n - 2)

def fib_caller(l, res_list, start_idx):
    for i in range(len(l)):
        x = fib(l[i])
        print(x)
        res_list[start_idx + i] = x

if __name__ == '__main__':
    task_list = [1, 37, 1, 37, 1, 37, 1, 37, 1, 37]
    manager = multiprocessing.Manager()
    res_list = manager.list(task_list)

    choice = input(
        "请选择执行模式:\n单进程模式: 输入s\n多进程模式: 输入m\n")

    begin = time.time()

    if choice.lower() == 's':
        fib_caller(task_list, res_list, 0)
    elif choice.lower() == 'm':
        # 拆分任务为5组,每组2个任务
        task_groups = [
            (task_list[0:2], res_list, 0),
            (task_list[2:4], res_list, 2),
            (task_list[4:6], res_list, 4),
            (task_list[6:8], res_list, 6),
            (task_list[8:10], res_list, 8),
        ]
        processes = []
        # 先启动所有进程
        for args in task_groups:
            p = multiprocessing.Process(target=fib_caller, args=args)
            p.start()
            processes.append(p)
        # 统一等待所有进程执行完成
        for p in processes:
            p.join()
    else:
        print('输入无效.')

    print(list(res_list))
    end = time.time()
    total = end - begin
    print(f"总执行时间: {total}")

修正后多进程模式的执行时间会接近单进程的1/5(取决于你的CPU核心数)。

内容的提问来源于stack exchange,提问作者Qosay Al-Shatel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:18:01