Process多进程实现文件的复制
使用Process首先要导入multiprocessing模块
- 使用multiprocessing创建子进程,子进程会复制父进程的全部代码段,父子进程各自执行互不影响,父子进程有各自的运行空间
- 如果不使用join回收子进程,则子进程退出后会成为僵尸进程
- 使用multiprocessing创建子进程往往父进程只是用来创建进程和回收进程
Process的一般使用方法:
- 创建父子进程
- 启动进程
- 回收进程
利用Process多进程实现一个小案例:
将一个文件复制成两个小的文件,一个复制上半截,一个复制下半截
分析:
我们让两个复制功能同时进行即可
from multiprocessing import Process
import os
# 要复制的文件
filename = 'send.png'
# 获取文件的大小
size = os.path.getsize(filename)
# 打开要复制的文件
fr = open(filename, 'rb')
# 复制文件的上半部分
def copy_up():
# 获取文件的一半字节数
n = size // 2
# 打开新的文件用来保存上半部分
fw = open('recv_up.png')
# 开始读写文件
while True:
# 如果小于1024了,直接将剩下的的写入到文件中
if n <1024:
data = fr.read(n)
fw.write(data)
break
# 每次读1024字节
data = fr.read(1024)
fw.write(data)
n -= 1024
fr.close()
fw.close()
# 复制文件的下半部分
def copy_down():
fw = open('recv_down.png', 'wb')
# 续写
fr.seek(size // 2, 0)
while True:
data = fr.read(1024)
if not data:
break
fw.write(data)
fw.close()
fr.close()
if __name__ == '__main__':
# 创建父子进程
p1 = Process(target=copy_up)
p2 = Process(target=copy_down)
p1.start()
p2.start()
p1.join()
p2.join()
复制一半的话对图片会发生不可预知的错误,上半部分还好,下半部分就会产生错误了。
本节就到这吧!