练习题:多线程计算器
题目描述:
设计一个简单的多线程计算器,该计算器能够接收用户输入的算术表达式,然后使用多线程并行计算每个表达式的结果。
功能要求:
- 用户通过控制台输入算术表达式(只包含加、减、乘、除)。
- 程序将每个表达式放入队列中,并由多个工作线程并行计算。
- 每个工作线程计算完一个表达式后,输出结果。
- 程序能够处理多个用户输入的表达式,直到用户输入特定的停止命令(例如"exit")。
技术要求:
- 使用Python的
threading
模块实现多线程。 - 使用
queue
模块创建任务队列。 - 确保线程安全地从队列中获取任务。
参考答案:
import threading
from queue import Queue
# 定义计算任务的函数
def calculate(expression):
try:
result = eval(expression)
print(f"计算结果:{expression} = {result}")
except Exception as e:
print(f"计算错误:{expression},错误信息:{e}")
# 多线程计算器的主程序
def main():
input_queue = Queue()
threads = []
# 创建并启动多个工作线程
for _ in range(3): # 可以根据需要创建不同数量的线程
thread = threading.Thread(target=worker)
thread.start()
threads.append(thread)
# 用户输入表达式
while True:
expr = input("请输入算术表达式(exit退出):")
if expr.lower() == 'exit':
break
input_queue.put(expr)
# 关闭队列,不再接受新任务
input_queue.put(None) # 使用None作为线程结束的信号
# 等待所有线程完成工作
for thread in threads:
thread.join()
print("计算完成。")
# 工作线程的函数
def worker():
while True:
# 从队列中获取任务,如果队列为空,线程将继续等待
expr = input_queue.get()
if expr is None:
break # 如果任务是None,则退出循环
calculate(expr)
input_queue.task_done()
if __name__ == "__main__":
main()
在这个练习题中,我们创建了一个简单的多线程计算器。用户可以输入算术表达式,程序将表达式放入队列中,并由多个工作线程并行计算。当用户输入"exit"时,程序将停止接受新的表达式并等待所有线程完成工作。这个练习题可以帮助你理解和练习Python中线程的应用。