zoukankan      html  css  js  c++  java
  • 练习题,使用多线程编写一个简单的文本处理工具

    一. 练习题要求:
      编写一个简单的文本处理工具,具备三个任务,一个接收用户输入,一个将用户输入的内容格式化成大写,一个将格式化后的结果存入文件

    二. 分析:
      三个任务,那就是三个线程.分别的输入,转换,写入,这3个线程.那么写入的输入,其他线程怎么取出?我们可以使用Queue队列,把用户输入的字符写入到队列中,然后再进行转换.转换完成后,再写入到另外一个队列中.等待最后写入文件
    三.实现
      
     1 from threading import Thread
     2 from multiprocessing import Queue
     3 
     4 
     5 def inp(q):
     6     while True:
     7         inp_str = input(">>>>").strip()
     8         q.put(inp_str)
     9         if inp_str == "exit":
    10             break
    11 
    12 
    13 def str_up(q, q1):
    14     while True:
    15         msg = q.get().upper()
    16         q1.put(msg)
    17         if msg == "EXIT":
    18             break
    19 
    20 
    21 def dump_f(q1):
    22     while True:
    23         if q1.get() != "EXIT":
    24             with open("test.txt", "a+", encoding="utf-8") as f:
    25                 f.write(q1.get() + "
    ")
    26         else:
    27             break
    28 
    29 
    30 if __name__ == '__main__':
    31     q = Queue()
    32     q1 = Queue()
    33     t1 = Thread(target=inp, args=(q,))
    34     t2 = Thread(target=str_up, args=(q, q1))
    35     t3 = Thread(target=dump_f, args=(q1,))
    36     t1.start()
    37     t2.start()
    38     t3.start()
    简单的文本处理
     1 from threading import Thread
     2 from multiprocessing import Queue
     3 
     4 
     5 def inp(q):
     6     while True:
     7         inp_str = input(">>>>").strip()
     8         q.put(inp_str)
     9         if inp_str == "exit":
    10             break
    11 
    12 
    13 def str_up(q, ):
    14     while True:
    15         msg = q.get().upper()
    16         q.put(msg)
    17         if msg == "EXIT":
    18             break
    19 
    20 
    21 def dump_f(q):
    22     while True:
    23         new_msg = q.get()
    24         if new_msg == "EXIT":
    25             break
    26         with open("test.txt", "a+", encoding="utf-8") as f:
    27             f.write(new_msg + "
    ")
    28 
    29 
    30 if __name__ == '__main__':
    31     q = Queue()
    32     t1 = Thread(target=inp, args=(q,))
    33     t2 = Thread(target=str_up, args=(q,))
    34     t3 = Thread(target=dump_f, args=(q,))
    35     t1.start()
    36     t2.start()
    37     t3.start()
    优化版本

      刚编写完成,关了电脑.突然想到,队列写入一个,再拿走一个,此时队列就是空的.为啥还要多用q1那个队列呢?把转换后的数据直接写入到q队列里,再次拿出写到文件的时候,不就是转换后的数据了吗?于是,再打开电脑,试了一下.最后那个exit的判断,是没有写到文件里.如果想写入到文件,把那个判断写到with open的后面即可.

  • 相关阅读:
    linux权限补充:rwt rwT rws rwS 特殊权限
    关于Linux操作系统下文件特殊权限的解释
    Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 复数四则运算
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9278702.html
Copyright © 2011-2022 走看看