在python中沒有辦法使用佇列進行傳入到pool中
這就導致如果要使用傳入佇列,那麼需要使用另外的封裝方法
使用pool和佇列模擬檔案複製
import random
import time
from multiprocessing import manager
from multiprocessing import pool
defmy_copy_read
(q,old_file)
:# 開啟檔案將檔案內容讀取出來
with
open
(old_file,
'r',encoding=
'utf-8'
)as f:
q.put(f.readlines())
# 將檔案內容讀到佇列中
# print(f'檔案讀取完成')
defmy_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'新檔案寫入完成'
)if __name__ ==
'__main__'
:# 例項化佇列
q = manager(
).queue(
)# 例項化程序池,並設定程序池只允許有3個程序同時執行
pool = pool(2)
# 準備好檔案路徑列表
old_file_address =
[f'./study.py'
for i in
range(1
,8)]
# 準備好新的檔案路徑列表
for i in old_file_address:
(q,i)
)# 寫檔案
for i in
range(1
,len
(old_file_address)+1
):(q,f'./.txt'))
pool.close(
) pool.join(
)print
('總程序結束'
)
使用的是from multiprocessing import manager,在manager上面存在manager().queue()例項化乙個佇列,這個佇列的使用和常規的queue方法是一樣的,同樣具有get和put方法,
這裡本身./路徑下存在7個檔案,將檔案複製到當前目錄下並改名
多執行緒補充
標籤 空格分隔 多執行緒 pragma mark 延遲執行 void delay pragma mark 只執行一次 void once pragma mark 快速迭代 獲取 資料夾路徑和目的資料夾路徑 nsstring source users v desktop source nsstring...
多執行緒學習筆記 執行緒
thread類 常用屬性 currentthread 獲取當前正在執行的執行緒 isalive 指示當前執行緒的執行狀態 isbackground 指示是否為後台執行緒 isthreadpoolthread 指示是否屬於託管執行緒池 managedthreadid 獲取執行緒識別符號 name 獲取...
多執行緒學習筆記
多執行緒的相關概念 什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的...