silentPasser 发表于 2021-9-23 17:08

多进程备份文件

本帖最后由 silentPasser 于 2021-9-24 11:57 编辑

代码:
from multiprocessing import Manager, Pool
import os


def copyFile(oldFile, newFile, queue=None):
    with open(oldFile, 'rb') as f:
      content = f.read()
    with open(newFile, 'wb') as f:
      f.write(content)
    if queue is not None:
      queue.put(1)


def copyFolder(old, new):
    os.mkdir(new)
    files = os.listdir(old)
    pool = Pool(8)
    # 待拷贝文件数
    n = files.__len__()
    queue = Manager().Queue(n)
    for file in files:
      pool.apply_async(copyFile, (f'{old}\\{file}', f'{new}\\{file}', queue))

    pool.close()

    # 完成拷贝的文件个数
    finish = 0
    while finish < n:
      finish += queue.get()
      rate = int(finish / n * 100)
      print('\r', '♦' * int(rate / 5), f'{rate}%', end='')

    pool.join()




def main():
    old = input("原文件路径:")
    new = input('拷贝文件路径:')
    if os.path.exists(old):
      if os.path.isdir(old):
            copyFolder(old, new)
            return
      copyFile(old, new)
      return
    print('原文件不存在!')
    main()


if __name__ == '__main__':
    main()


存在的bug:
要备份的文件夹中不能包含文件夹。

侃遍天下无二人 发表于 2021-9-23 18:39

所谓备份就是用代码复制粘贴吗,多线程又不能解决磁盘IO资源不足的问题,不如做个透明加密上传到阿里云盘备份的功能,同时要求下载回来的时候能实现透明解密

细水流长 发表于 2021-9-23 18:43

侃遍天下无二人 发表于 2021-9-23 19:09

细水流长 发表于 2021-9-23 18:43
把阿里云盘挂载到本地,然后复制粘贴进去不就行了
自动备份的话也比较简单

关键词:透明加密、透明解密

JinxBoy 发表于 2021-9-23 21:25

不能有文件夹 ?

虔来学习 发表于 2021-9-24 07:40

代码上写貌似是多进程,标题为什么用多线程,多线程应该是用threading库的,可你用的是multiprocessing。。。。。

silentPasser 发表于 2021-9-24 11:54

虔来学习 发表于 2021-9-24 07:40
代码上写貌似是多进程,标题为什么用多线程,多线程应该是用threading库的,可你用的是multiprocessing。。 ...

没注意,多线程说多了
页: [1]
查看完整版本: 多进程备份文件