一个线程进行如下运算1+2+3+4+….+200,而另一个线程则每隔一个随机产生的时间(0-100毫秒)读取依次第一个线程的当前运算结果并输出。
时间: 2023-12-17 18:05:28 浏览: 15
这是一个典型的多线程编程问题。可以使用线程同步技术来保证数据的正确性。
以下是一个可能的解决方案:
```python
import threading
import time
import random
class SumThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.sum = 0
self.lock = threading.Lock()
def run(self):
for i in range(1, 201):
self.lock.acquire()
self.sum += i
self.lock.release()
time.sleep(0.01) # 为了让第二个线程有机会读取结果,降低计算速度
class PrintThread(threading.Thread):
def __init__(self, sum_thread):
threading.Thread.__init__(self)
self.sum_thread = sum_thread
def run(self):
while True:
time.sleep(random.uniform(0, 0.1))
print("current sum: ", self.sum_thread.sum)
if __name__ == "__main__":
sum_thread = SumThread()
print_thread = PrintThread(sum_thread)
sum_thread.start()
print_thread.start()
sum_thread.join()
print_thread.join()
```
上面的代码中,`SumThread`和`PrintThread`分别代表两个线程。`SumThread`用来计算1到200的和,`PrintThread`用来读取`SumThread`的计算结果并输出。为了保证数据的正确性,我们使用了一个锁来保证在计算和的过程中,任何时候只有一个线程能够修改`self.sum`的值。
在`PrintThread`中,我们使用了`time.sleep(random.uniform(0, 0.1))`来模拟随机产生的时间。使用`random.uniform()`函数可以产生一个0到0.1秒之间的随机时间间隔。
最后,我们启动两个线程并等待它们完成运行。当`SumThread`完成计算后,`join()`函数会等待`PrintThread`完成输出,然后整个程序结束。