網絡編程--Process多進程實現文件的複製

Process多進程實現文件的複製

使用Process首先要導入multiprocessing模塊

  • 使用multiprocessing創建子進程,子進程會複製父進程的全部代碼段,父子進程各自執行互不影響,父子進程有各自的運行空間
  • 如果不使用join回收子進程,則子進程退出後會成爲殭屍進程
  • 使用multiprocessing創建子進程往往父進程只是用來創建進程和回收進程

Process的一般使用方法:

  1. 創建父子進程
  2. 啓動進程
  3. 回收進程

利用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()

在這裏插入圖片描述

複製一半的話對圖片會發生不可預知的錯誤,上半部分還好,下半部分就會產生錯誤了。

本節就到這吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章