Board logo

标题: [原创代码] python多进程( 永远删除不完的文件 ) [打印本页]

作者: Gin_Q    时间: 2020-7-31 15:31     标题: python多进程( 永远删除不完的文件 )

  1. # 永远删不完的文件
  2. # BY GIN
  3. # 2020-7-31
  4. #coding=utf-8
  5. import os
  6. from multiprocessing import Process, Queue
  7. import time
  8. import random
  9. PH = r'D:\GIN\py\test\temp'
  10. Q = Queue()
  11. def random_del():
  12.     # 随机删除一个文件
  13.     os.chdir(PH)
  14.     while True:
  15.         time.sleep(0.5)
  16.         file = str(random.Random.randint(random,1,10)) + '.txt'
  17.         if os.path.isfile(file):
  18.             print('随机删除一个文件:{}'.format(file))
  19.             os.remove(file)
  20.         
  21. def supplement_t(Q):
  22.     # 补充缺失文件
  23.     os.chdir(PH)
  24.     while True:
  25.         time.sleep(0.5)
  26.         # print('get {:>2}'.format(Q.qsize()))
  27.         while not Q.empty():
  28.             file = Q.get()
  29.             print('正在补充缺失文件:{}'.format(file))
  30.             with open(file, "w") as f:
  31.                 pass
  32. def chec_txt(Q):
  33.     # 检查文件是否缺失。
  34.     # 如果文件缺失,向补充文件函数发送
  35.     # 缺失文件。
  36.     os.chdir(PH)
  37.     while True:
  38.         for i in (range(1,11)):
  39.             time.sleep(0.3)
  40.             file = str(i) + '.txt'
  41.             if not os.path.isfile(file):
  42.                 Q.put(file)
  43.                 # print('put {:>2}'.format(Q.qsize()))
  44.    
  45. def generate_txt():
  46.     # 创建所有文件。
  47.     os.chdir(PH)
  48.     for i in range(1,11):
  49.         file = str(i) + '.txt'
  50.         print('touch  {:>6}'.format(file))
  51.         with open(file, "w") as f:
  52.             pass
  53.    
  54. if __name__ == '__main__':
  55.     gen_p = Process(target=generate_txt)
  56.     che_p = Process(target=chec_txt, args=(Q,))     # 需要传入相同的对象
  57.     get_p = Process(target=supplement_t, args=(Q,))   # 需要传入相同的对象
  58.     rad_p = Process(target=random_del)
  59.     gen_p.start()
  60.     che_p.start()
  61.     get_p.start()
  62.     rad_p.start()
  63.     # 主进程会等待所有进程结束
复制代码
result:
  1. touch   1.txt
  2. touch   2.txt
  3. touch   3.txt
  4. touch   4.txt
  5. touch   5.txt
  6. touch   6.txt
  7. touch   7.txt
  8. touch   8.txt
  9. touch   9.txt
  10. touch  10.txt
  11. 随机删除一个文件:5.txt
  12. 随机删除一个文件:6.txt
  13. 随机删除一个文件:1.txt
  14. 正在补充缺失文件:5.txt
  15. 正在补充缺失文件:6.txt
  16. 随机删除一个文件:3.txt
  17. 随机删除一个文件:9.txt
  18. 随机删除一个文件:4.txt
  19. 正在补充缺失文件:1.txt
  20. 随机删除一个文件:2.txt
  21. 正在补充缺失文件:3.txt
  22. 正在补充缺失文件:4.txt
  23. 随机删除一个文件:1.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2