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()
複製一半的話對圖片會發生不可預知的錯誤,上半部分還好,下半部分就會產生錯誤了。
本節就到這吧!