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的后面即可.

  • 相关阅读:
    X509IncludeOption 枚举
    SHA-1算法——(2)
    SHA-1算法
    消息摘要算法
    Oid 类
    @param注解
    类X509Certificate2
    sq分页
    svn不是内部或外部命令?
    PhpStorm配置svn:Can't use Subversion command line client:svn
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9278702.html
Copyright © 2011-2022 走看看