1.程序的基本使用:
from multiprocessing import process
class myprocess(process):
def run(self):
print(
'name:--pid:'.format(self.name, self.pid))
if __name__ ==
'__main__'
: p = myprocess(
) p.start(
) p.join(
)
控制台輸出:
name:myprocess-1--pid:45612
2.程序池:
from multiprocessing import process, current_process, pool
def func(num):
pid = current_process(
).pid
# 程序獲得pid和name可以直接用multiprocessing中的current_process
name = current_process(
).name
print(
'num:,pid:,name:'.format(num, pid, name))
if __name__ ==
'__main__'
: pool = pool(4)
n_list = range(100)
for n in n_list:
(n,))
pool.close(
) pool.join(
)
3.通過queue進行通訊:程序之間是相互隔離的,要實現程序間通訊,multiprocessing提供了佇列和管道的方式,管道不自動加鎖,此處使用的是佇列方式:
(一方通過put寫入資料,一方通過get獲得資料)
from multiprocessing import process,current_process,queue
class writeprocess(process):
def __init__(self, q, *args, **kwargs):
super(
).__init__(*args, **kwargs)
self.q = q
def run(self):
context =
['第一行內容',
'第二行內容',
'第三行內容'
]for each in context:
print(
'寫入內容:,名字:'.format(each, current_process(
).name))
self.q.put(each)
class readprocess(process):
def __init__(self, q, *args, **kwargs):
super(
).__init__(*args, **kwargs)
self.q = q
def run(self):
while true:
print(self.q.get(
))if __name__ ==
'__main__'
: q = queue(
)# 通過q來通訊
w = writeprocess(q)
r = readprocess(q)
w.start(
) r.start(
) w.join(
) r.terminate(
)# 由於讀的**寫的是死迴圈,且沒有再有子程序了,
# 所以使用terminate終止程式
4.程序鎖
同樣在class的定義中傳入lock,加鎖並釋放鎖,或者使用with操作:
from multiprocessing import process,current_process,queue,lock
import
time
class writeprocess(process):
def __init__(self, lock, num, *args, **kwargs):
super(
).__init__(*args, **kwargs)
# self.q = q
self.lock = lock
self.num = num
def run(self):
with self.lock:
for i in range(10):
with open(
'test2.txt', 'w', encoding=
'utf-8'
) as f:
context =
'寫入內容:i:, pid:, num:'.format(i, self.pid,self.num)
f.write(context)
f.write(
'\n'
) print(context)
time.sleep(2)
if __name__ ==
'__main__'
: lock = lock(
)for i in range(5):
w1 = writeprocess(lock,i)
w1.start(
)# 此處不用join,否則一條程序結束後才會起第二條程序
寫入內容:i:0, pid:65248, num:0
寫入內容:i:1, pid:65248, num:0
寫入內容:i:2, pid:65248, num:0
寫入內容:i:3, pid:65248, num:0
寫入內容:i:4, pid:65248, num:0
寫入內容:i:5, pid:65248, num:0
寫入內容:i:6, pid:65248, num:0
寫入內容:i:7, pid:65248, num:0
寫入內容:i:8, pid:65248, num:0
寫入內容:i:9, pid:65248, num:0
Python 程序 執行緒 協程
程序和執行緒之間的關係 執行緒是屬於程序的,執行緒執行在程序空間內,同一程序所產生的執行緒共享同一記憶體空間,當程序退出時該程序所產生的執行緒都會被強制退出並清除。執行緒可與屬於同一程序的其它執行緒共享程序所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在執行中必不可少的資訊 如程式計數...
Python 程序,執行緒, 協程
程序是系統進行資源分配和排程的乙個獨立單位 最小單位 程序的幾個狀態 空 新建 建立執行乙個程式的新程序,可能的事件有 新的批處理作業 互動登入 終端使用者登入到系統 作業系統因為提供一項服務而建立 由現有的程序派生等。新建 就緒 作業系統準備好再接納乙個程序時,把乙個程序從新建態轉換為就緒態。就緒...
程序 執行緒 協程
多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...