例項1
# coding=utf-8
from multiprocessing import process
import os
"""多程序中,每個程序中所有資料(包括全域性變數)都各有擁有乙份,互不影響
父程序、子程序執行順序沒有規律,完全取決於作業系統的排程演算法
process([group [, target [, name [, args [, kwargs]]]]])
target:表示這個程序例項所呼叫物件;
args:表示呼叫物件的位置引數元組;
kwargs:表示呼叫物件的關鍵字引數字典;
name:為當前程序例項的別名;
group:大多數情況下用不到;
process類常用方法:
is_alive():判斷程序例項是否還在執行;
join([timeout]):是否等待程序例項執行結束,或等待多少秒;
start():啟動程序例項(建立子程序);
run():如果沒有給定target引數,對這個物件呼叫start()方法時,就將執行物件中的run()方法;
terminate():不管任務是否完成,立即終止;
process類常用屬性:
name:當前程序例項別名,預設為process-n,n為從1開始遞增的整數;
pid:當前程序例項的pid值;
"""# 子程序要執行的**
def run_proc(name):
print('子程序執行中,name= %s ,pid=%d...' % (name, os.getpid()))
if __name__ == '__main__':
print('父程序 %d.' % os.getpid())
p = process(target=run_proc, args=('test',))
print('子程序將要執行')
p.start() # 啟動
p.join() # 等待子程序結束後再繼續往下執行,通常用於程序間的同步。
print('子程序已結束')
例項2
# coding=utf-8
from multiprocessing import process
import time
import os
# 兩個子程序將會呼叫的兩個方法
def worker_1(interval):
print("worker_1,父程序(%s),當前程序(%s)" % (os.getppid(), os.getpid()))
t_start = time.time()
time.sleep(interval) # 程式將會被掛起interval秒
t_end = time.time()
print("worker_1,執行時間為'%0.2f'秒" % (t_end - t_start))
def worker_2(interval):
print("worker_2,父程序(%s),當前程序(%s)" % (os.getppid(), os.getpid()))
t_start = time.time()
time.sleep(interval)
t_end = time.time()
print("worker_2,執行時間為'%0.2f'秒" % (t_end - t_start))
def main():
print("程序id:%s" % os.getpid()) # 輸出當前程式的id
p1 = process(target=worker_1, args=(2,))
p2 = process(target=worker_2, name="程序2", args=(1,)) # 如果不指定name引數,預設的程序物件名稱為process-n,n為乙個遞增的整數
p1.start()
p2.start()
print("p2.is_alive:%s" % p2.is_alive()) # 同時父程序仍然往下執行,如果p2程序還在執行,將會返回true
# 輸出p1和p2程序的別名和pid
print("p1.name=%s" % p1.name)
print("p1.pid=%s" % p1.pid)
print("p2.name=%s" % p2.name)
print("p2.pid=%s" % p2.pid)
# join括號中不攜帶引數,表示父程序在這個位置要等待p1程序執行完成後,
# 再繼續執行下面的語句,一般用於程序間的資料同步,
# 如果不寫這一句,下面的is_alive判斷將會是true,
# 在shell(cmd)裡面呼叫這個程式時,可以完整的看到這個過程
p1.join()
print("p1.is_alive=%s" % p1.is_alive())
if __name__ == '__main__':
main()
python基礎 多程序
程序執行緒的區別在程序,執行緒,協程的區別 linux或者unix有fork 函式,但是不支援win系統。multiprocessing模組是跨平台版本的多程序模組。支援win系統,用法如下 from multiprocessing import process importos 子程序要執行的 d...
python基礎 多程序
程序執行緒的區別在程序,執行緒,協程的區別 linux或者unix有fork 函式,但是不支援win系統。multiprocessing模組是跨平台版本的多程序模組。支援win系統,用法如下 from multiprocessing import process importos 子程序要執行的 d...
python使用多程序
python多執行緒適合io密集型場景,而在cpu密集型場景,並不能充分利用多核cpu,而協程本質基於執行緒,同樣不能充分發揮多核的優勢。針對計算密集型場景需要使用多程序,python的multiprocessing與threading模組非常相似,支援用程序池的方式批量建立子程序。只需要例項化pr...