Python多线程:如何为每个数字生成独立线程计算平方?
解答:为每个数字创建独立并发线程计算平方
嘿,很高兴看到你在探索Python多线程!先帮你指出第二段代码里的关键问题:你在循环中每次启动线程后立刻调用了t1.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 = [] # 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
相关产品推荐
相关产品推荐

