多线程计算器

简介: 多线程计算器

练习题:多线程计算器

题目描述
设计一个简单的多线程计算器,该计算器能够接收用户输入的算术表达式,然后使用多线程并行计算每个表达式的结果。

功能要求

  1. 用户通过控制台输入算术表达式(只包含加、减、乘、除)。
  2. 程序将每个表达式放入队列中,并由多个工作线程并行计算。
  3. 每个工作线程计算完一个表达式后,输出结果。
  4. 程序能够处理多个用户输入的表达式,直到用户输入特定的停止命令(例如"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中线程的应用。

目录
相关文章
|
1月前
|
C语言
C语言程序基本的计算器功能
C语言程序基本的计算器功能
9 0
|
9月前
|
Java
从计算器小例子的总结思考
从计算器小例子的总结思考
93 0
|
4月前
|
Java
计算器的模拟实现
计算器的模拟实现
54 0
|
10月前
|
算法 前端开发 存储
前端算法-计算器
前端算法-计算器
|
11月前
|
算法
lougu 2485计算器(BSGS)
lougu 2485计算器(BSGS)
108 0
计算器(简易版)
另一种是利用转移表的方式来写,将各个函数的地址存放在一个函数指针数组里面,当要使用函数时,就直接调用指针即可,可以改观上面的美观(上面的代码有很多重复的,太挫了)
70 0
|
前端开发
一个很简易的计算器
一个很简易的计算器
72 0
一个很简易的计算器
|
Java
用Java实现计算器功能
###### 程序解析: 使用Scanner进行导包,抓取用户数据,进行强制转换,转换成float类型,进行 计算创建一个方法,使用这个方法进行工作处理数据,再创建一个流程方法,使用 equals判断比较数据,使代码更严谨,使用break;和continue;增加程序的复用性 ,使程序更加的灵活。使用Switch语句判断符号,进行传参计算,使用while(){} 语句增加一个死循环,使程序更复用,不浪费数据,增加一些严禁判断,让程序更 完美一点。
190 0
用Java实现计算器功能
|
C语言
练习11—计算器实现
练习11—计算器实现
练习11—计算器实现