Python中使用多进程复制文件

使用fork()函数创建父子进程,父进程复制文件的前半部分,子进程复制文件的后半部分

#!/usr/bin/python
#coding=utf-8
import sys,os
#将第一参数作为源文件,以读写模式打开
try:                       
    fd_src = open(sys.argv[1],'r+')
except:
    print "open fd_src failed"

fd_src.seek(0,2)            # 将指针指到文件末尾
size = fd_src.tell()       # 将文件末尾的指针位置赋值给size,size即为文件的总大小


try:                          # 将第二参数作为目标文件以读写模式创建并打开
    fd_dst = open(sys.argv[2],'w+')
except:
    print "open fd_dst failed"

size /= 2

pid = os.fork()

if pid < 0:
    print "fail to fork"
    exit(-1)
elif pid == 0:           #子进程,用来复制文件的后半部分
    pass
    fd_src.close()        #将两个文件重新打开,游标调整到文件的中间
    fd_dst.close()
    fd_src = open(sys.argv[1],'r+')
    fd_dst = open(sys.argv[2],'w+')
    fd_src.seek(size,0)
    fd_dst.seek(size,0)

    while True:
        buf = fd_src.readline()
        if buf == '':
            break
        fd_dst.write(buf)
    exit(0)

else:                                  #父进程,用来复制文件的前半部分
    num = 0
    fd_src.seek(0,0)
    fd_dst.seek(0,0)
    print  'siza:',size
    while True:
        buf = fd_src.readline(1)
        num += len(buf)
        if num <= size:
            fd_dst.write(buf)
        else:
            break
    os.wait()
    exit(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值