鱼C论坛

 找回密码
 立即注册
查看: 2498|回复: 3

[作品展示] python多进程( 永远删除不完的文件 )+ 进度条打印

[复制链接]
发表于 2020-7-31 15:29:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Cool_Breeze 于 2020-8-4 15:32 编辑
# 永远删不完的文件
# BY GIN
# 2020-7-31

#coding=utf-8

import os
from multiprocessing import Process, Queue
import time
import random

PH = r'D:\GIN\py\test\temp'
Q = Queue()

def random_del():
    # 随机删除一个文件
    os.chdir(PH)
    while True:
        time.sleep(0.5)
        file = str(random.Random.randint(random,1,10)) + '.txt'
        if os.path.isfile(file):
            print('随机删除一个文件:{}'.format(file))
            os.remove(file)
        

def supplement_t(Q):
    # 补充缺失文件
    os.chdir(PH)
    while True:
        time.sleep(0.5)
        # print('get {:>2}'.format(Q.qsize()))
        while not Q.empty():
            file = Q.get()
            print('正在补充缺失文件:{}'.format(file))
            with open(file, "w") as f:
                pass


def chec_txt(Q):
    # 检查文件是否缺失。
    # 如果文件缺失,向补充文件函数发送
    # 缺失文件。
    os.chdir(PH)
    while True:
        for i in (range(1,11)):
            time.sleep(0.3)
            file = str(i) + '.txt'
            if not os.path.isfile(file):
                Q.put(file)
                # print('put {:>2}'.format(Q.qsize()))
    

def generate_txt():
    # 创建所有文件。
    os.chdir(PH)
    for i in range(1,11):
        file = str(i) + '.txt'
        print('touch  {:>6}'.format(file))
        with open(file, "w") as f:
            pass

    
if __name__ == '__main__':
    gen_p = Process(target=generate_txt)
    che_p = Process(target=chec_txt, args=(Q,))     # 需要传入相同的对象
    get_p = Process(target=supplement_t, args=(Q,))   # 需要传入相同的对象
    rad_p = Process(target=random_del)
    gen_p.start()
    che_p.start()
    get_p.start()
    rad_p.start()
    # 主进程会等待所有进程结束

result:
touch   1.txt
touch   2.txt
touch   3.txt
touch   4.txt
touch   5.txt
touch   6.txt
touch   7.txt
touch   8.txt
touch   9.txt
touch  10.txt
随机删除一个文件:5.txt
随机删除一个文件:6.txt
随机删除一个文件:1.txt
正在补充缺失文件:5.txt
正在补充缺失文件:6.txt
随机删除一个文件:3.txt
随机删除一个文件:9.txt
随机删除一个文件:4.txt
正在补充缺失文件:1.txt
随机删除一个文件:2.txt
正在补充缺失文件:3.txt
正在补充缺失文件:4.txt
随机删除一个文件:1.txt

####
'''
@ 进度条打印
'''

#coding=utf-8

from time import sleep
from multiprocessing import Process,Queue

q = Queue()

ico = [
    ['0%',''],
    ['10%','X'],
    ['20%','XX'],
    ['30%','XXX'],
    ['40%','XXXX'],
    ['50%','XXXXX'],
    ['60%','XXXXXX'],
    ['70%','XXXXXXX'],
    ['80%','XXXXXXXX'],
    ['90%','XXXXXXXXX'],
    ['100%\n','XXXXXXXXXX'],
    ]

def run(q):
    while True:
        if not q.empty():
            t = q.get()
            if t == None: break
            print('\r{:<10}{}'.format(t[1],t[0]),end='',flush=True)
    
    
if __name__ == "__main__":
    n = 0
    arr = []
    p = Process(target=run,args=(q,))
    p.start()
    print('开始计算 1 累加到 10 :')
    for i in range(11):
        n += i
        q.put(ico[i])
        sleep(0.2)
    q.put(None)
    p.join()
    print('计算 1 累加到 10 完成:{}'.format(n))
    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-31 17:31:30 From FishC Mobile | 显示全部楼层
Emmmmm 应该没什么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 18:18:44 | 显示全部楼层
_2_ 发表于 2020-7-31 17:31
Emmmmm 应该没什么用

或许,可以改一改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 18:22:36 | 显示全部楼层
_2_ 发表于 2020-7-31 17:31
Emmmmm 应该没什么用

学习多进程,感觉不得劲,总是要有项目才有力量!所有就写了个这!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 01:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表