用蒙特卡罗方法求积分的多线程python代码,并统计每个线程运行时间
时间: 2024-03-09 07:49:04 浏览: 64
下面是一个使用多线程的Python代码示例,可以计算每个线程的运行时间:
```python
import random
import threading
import time
def monte_carlo_integration(f, a, b, n):
s = 0
for i in range(n):
x = random.uniform(a, b)
s += f(x)
return s * (b - a) / n
def parallel_monte_carlo_integration(f, a, b, n, num_threads):
threads = []
results = []
start_times = []
end_times = []
for i in range(num_threads):
start_times.append(time.time())
t = threading.Thread(target=lambda: results.append(monte_carlo_integration(f, a, b, n // num_threads)))
threads.append(t)
t.start()
for t in threads:
t.join()
end_times.append(time.time())
total_time = sum([end_times[i] - start_times[i] for i in range(num_threads)])
return sum(results) / num_threads, total_time
# 示例:估计 sin(x) 在 [0, pi/2] 区间的积分值
result, total_time = parallel_monte_carlo_integration(lambda x: math.sin(x), 0, math.pi / 2, 1000000, 4)
print(f"积分值:{result}")
print(f"总运行时间:{total_time} 秒")
```
在上面的代码中,`start_times` 和 `end_times` 分别用于记录每个线程的开始和结束时间,`total_time` 用于计算总的运行时间。在示例中,使用了 4 个线程进行计算。
阅读全文