用多线程的方式求圆周率python代码并统计程序运行时间
时间: 2024-02-18 16:06:11 浏览: 128
π-圆周率python代码-下载即用.py
以下是一个使用多线程并行计算圆周率的 Python 代码,并使用 time 模块计算程序运行时间:
```python
import random
import threading
import time
THREAD_NUM = 4 # 线程数
POINTS_PER_THREAD = 1000000 # 每个线程生成的点数
total_points = POINTS_PER_THREAD * THREAD_NUM # 总点数
points_in_circle = 0 # 落在圆内的点数
lock = threading.Lock() # 互斥锁,用于保证数据一致性
def monte_carlo():
global points_in_circle
count = 0
for i in range(POINTS_PER_THREAD):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x * x + y * y <= 1:
count += 1
with lock:
points_in_circle += count
threads = []
for i in range(THREAD_NUM):
t = threading.Thread(target=monte_carlo)
threads.append(t)
t.start()
# 等待所有线程完成
for t in threads:
t.join()
# 计算圆周率
pi = 4.0 * points_in_circle / total_points
print("圆周率的估计值为", pi)
# 计算程序运行时间
end_time = time.time()
print("程序运行时间为", end_time - start_time, "秒")
```
在该代码中,首先定义了线程数和每个线程生成的点数,然后计算出总点数和落在圆内的点数。接着,定义了互斥锁 `lock`,用于保证数据的一致性。在 `monte_carlo` 函数中,生成指定数量的随机点,并统计落在圆内的点数,最后使用互斥锁将线程计算出的结果累加到 `points_in_circle` 中。在主程序中,创建多个线程并等待它们完成,最后计算估计的圆周率,并使用 time 模块计算程序运行时间。
阅读全文