**描述:
拷貝的原理:
1). 讀取原始檔的內容;
2). 寫入新的檔案中;
import os
import time
import multiprocessing # 進行程序間的通訊, queue
from queue import queue
def copyfiletask(oldfoldername, newfoldername, filename, queue):
"""import os
# 拼接生成絕對路徑
os.path.join('/mnt', 'file')
'/mnt/file'
os.path.join('/mnt/', 'file')
'/mnt/file'
:param oldfoldername: /root/day21/
:param newfoldername: /root/day21_backup_201901
:param filename: file1
:return:
"""# 兩者相同的效果, with語句執行節航速後, 自動關閉檔案物件;
# with open('/etc/passwd') as f:
# pass
# f = open('/etc/passwd')
# with f:
# pass
fr = open(os.path.join(oldfoldername, filename), 'rb')
fw = open(os.path.join(newfoldername, filename), 'wb')
with fr, fw:
content = fr.read(1024*3)
while content:
fw.write(content)
queue.put(filename)
# print(queue.qsize())
def main():
# 判斷備份目錄是否存在
while true:
# oldfoldername = input("請輸入備份的目錄名:")
oldfoldername ="/var/log/"
if os.path.exists(oldfoldername):
break
datename = time.strftime('_%y_%m_%d_%h_%m') # '2019_01_20'
newfoldername = oldfoldername + '_備份' + datename
if os.path.exists(newfoldername):
os.rmdir(newfoldername)
# 新建備份的目錄;
os.mkdir(newfoldername)
print("正在建立備份目錄%s....." % (newfoldername))
# 獲取備份目錄中的所有檔名;
filenames = os.listdir(oldfoldername)
# 佇列, 儲存已經備份的檔案;
# ****如果是用程序池,那麼就需要使用manager().queue()佇列才能在各子程序間通訊,否則沒用
queue = multiprocessing.manager().queue()
# queue = queue()
pool = multiprocessing.pool(4)
for name in filenames:
# 給程序池分配任務
newfoldername,
name,
queue))
# 100個檔案, 1個檔案 1%
num = 0 # 當前備份的檔案數
allnum = len(filenames) # 總備份的檔案數
# print(num, allnum)
while num < allnum:
# print(queue.qsize())
queue.get()
num += 1
copyrate = num / allnum # 0.2322
# \r使得游標不換行;
print("\r\r備份的進度為%.2f%%" % (copyrate * 100), end='')
pool.close()
pool.join()
print("備份成功;")
if __name__ == '__main__':
main()
多程序檔案拷貝
下面用程式實現這樣的功能 有乙個檔案的內容需要拷貝到另乙個檔案中,以前的做法是用乙個程序來完成,下面要做的是,是兩個程序同時做這件事,乙個程序負責一半,如父程序負責拷貝檔案的前半段,子程序負責拷貝檔案的後半段。下面看一下程式的流程以及需要注意的問題 其中 要注意的是當父程序呼叫fork函式建立子程序...
Python中的多程序
編寫完的 沒有執行時稱為程式,正在執行的 稱為程序。程式是死的 靜態的 程序是活的 動態的 作業系統輪流讓各個任務交替執行,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。多程序中,每個程序中所有資料 包括全域性變數 都各自擁有乙份,互不影響。例如 我們啟動了qq,qq就是乙...
python中的多程序
import multiprocessing import time deffunc arg pname multiprocessing.current process name pid multiprocessing.current process pid print 當前程序id d,name ...