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

Python多线程:如何为每个数字生成独立线程计算平方?

解答:为每个数字创建独立并发线程计算平方

嘿,很高兴看到你在探索Python多线程!先帮你指出第二段代码里的关键问题:你在循环中每次启动线程后立刻调用了t1.join(),这会让程序等待当前线程完全执行结束后,才会创建并启动下一个线程,本质上还是串行执行,根本没实现你想要的并发效果。

正确的并发实现方式

要让所有线程同时(或近乎同时)启动并运行,我们需要分三步操作:

  1. 先创建所有线程,把它们存入一个列表中
  2. 遍历列表一次性启动所有线程
  3. 最后再遍历列表,等待所有线程执行完成

下面是优化后的代码:

import threading

def sq(num):
    print(f"calculating square of {num}")
    print(f'square={num*num}')

numbers = [10,20,30,40,50,60]
threads = []

# 1. 创建所有线程并添加到列表
for num in numbers:
    thread = threading.Thread(target=sq, args=(num,))
    threads.append(thread)

# 2. 启动所有线程(此时才会并发执行)
for thread in threads:
    thread.start()

# 3. 等待所有线程完成任务
for thread in threads:
    thread.join()

更简洁的写法

如果你想让代码更紧凑,可以用列表推导式来创建线程列表,省去显式的循环添加步骤:

import threading

def sq(num):
    print(f"calculating square of {num}")
    print(f'square={num*num}')

numbers = [10,20,30,40,50,60]

# 用列表推导式一次性创建所有线程
threads = [threading.Thread(target=sq, args=(num,)) for num in numbers]

# 启动所有线程
for t in threads:
    t.start()

# 等待所有线程结束
for t in threads:
    t.join()

补充说明

这样的写法完美满足你的需求:每个数字对应一个独立线程,所有线程会并发执行(具体执行顺序由操作系统调度决定),而且不管你的数字列表长度是多少,代码都能自动适配,不用手动写n条线程创建语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:50