1. 程式人生 > >學習筆記-多執行緒補充

學習筆記-多執行緒補充

多執行緒pool補充

在python中沒有辦法使用佇列進行傳入到pool中

這就導致如果要使用傳入佇列,那麼需要使用另外的封裝方法

使用pool和佇列模擬檔案複製

import random

import time
from multiprocessing import Manager
from multiprocessing import Pool


def my_copy_read(q,old_file):
    # 開啟檔案將檔案內容讀取出來
    with open(old_file,'r',encoding='utf-8') as f:
        q.
put(f.readlines()) # 將檔案內容讀到佇列中 # print(f'檔案{old_file}讀取完成') def my_copy_write(q,new_file): time.sleep(random.random()*2) # 隨機0-2秒鐘 # 從佇列中拿出資料並寫入新的檔案 with open(new_file,'w',encoding='utf-8') as f: f.writelines(q.get()) # 檔案寫入完成後輸出 print(f'新檔案{new_file}寫入完成') if __name__ ==
'__main__': # 例項化佇列 q = Manager().Queue() # 例項化程序池,並設定程序池只允許有3個程序同時執行 pool = Pool(2) # 準備好檔案路徑列表 old_file_address = [f'./study{i}.py' for i in range(1,8)] # 準備好新的檔案路徑列表 for i in old_file_address: pool.apply_async(my_copy_read,(q,i)) # 寫檔案 for i in range
(1,len(old_file_address)+1): pool.apply_async(my_copy_write,(q,f'./{i}.txt')) pool.close() pool.join() print('總程序結束')

使用的是from multiprocessing import Manager,在Manager上面存在Manager().Queue()例項化一個佇列,這個佇列的使用和常規的Queue方法是一樣的,同樣具有get和put方法,
這裡本身./路徑下存在7個檔案,將檔案複製到當前目錄下並改名