您好,登錄后才能下訂單哦!
方式一: os.fork()
# -*- coding:utf-8 -*- """ pid=os.fork() 1.只用在Unix系統(tǒng)中有效,Windows系統(tǒng)中無效 2.fork函數(shù)調(diào)用一次,返回兩次:在父進(jìn)程中返回值為子進(jìn)程id,在子進(jìn)程中返回值為0 """ import os pid=os.fork() if pid==0: print("執(zhí)行子進(jìn)程,子進(jìn)程pid={pid},父進(jìn)程ppid={ppid}".format(pid=os.getpid(),ppid=os.getppid())) else: print("執(zhí)行父進(jìn)程,子進(jìn)程pid={pid},父進(jìn)程ppid={ppid}".format(pid=pid,ppid=os.getpid()))
方式二: 使用multiprocessing模塊: 創(chuàng)建Process的實例,傳入任務(wù)執(zhí)行函數(shù)作為參數(shù)
# -*- coding:utf-8 -*- """ Process常用屬性與方法: name:進(jìn)程名 pid:進(jìn)程id run(),自定義子類時覆寫 start(),開啟進(jìn)程 join(timeout=None),阻塞進(jìn)程 terminate(),終止進(jìn)程 is_alive(),判斷進(jìn)程是否存活 """ import os,time from multiprocessing import Process def worker(): print("子進(jìn)程執(zhí)行中>>> pid={0},ppid={1}".format(os.getpid(),os.getppid())) time.sleep(2) print("子進(jìn)程終止>>> pid={0}".format(os.getpid())) def main(): print("主進(jìn)程執(zhí)行中>>> pid={0}".format(os.getpid())) ps=[] # 創(chuàng)建子進(jìn)程實例 for i in range(2): p=Process(target=worker,name="worker"+str(i),args=()) ps.append(p) # 開啟進(jìn)程 for i in range(2): ps[i].start() # 阻塞進(jìn)程 for i in range(2): ps[i].join() print("主進(jìn)程終止") if __name__ == '__main__': main()
方式三: 使用multiprocessing模塊: 派生Process的子類,重寫run方法
# -*- coding:utf-8 -*- import os,time from multiprocessing import Process class MyProcess(Process): def __init__(self): Process.__init__(self) def run(self): print("子進(jìn)程開始>>> pid={0},ppid={1}".format(os.getpid(),os.getppid())) time.sleep(2) print("子進(jìn)程終止>>> pid={}".format(os.getpid())) def main(): print("主進(jìn)程開始>>> pid={}".format(os.getpid())) myp=MyProcess() myp.start() # myp.join() print("主進(jìn)程終止") if __name__ == '__main__': main()
方式四: 使用進(jìn)程池Pool
# -*- coding:utf-8 -*- import os,time from multiprocessing import Pool def worker(arg): print("子進(jìn)程開始執(zhí)行>>> pid={},ppid={},編號{}".format(os.getpid(),os.getppid(),arg)) time.sleep(0.5) print("子進(jìn)程終止>>> pid={},ppid={},編號{}".format(os.getpid(),os.getppid(),arg)) def main(): print("主進(jìn)程開始執(zhí)行>>> pid={}".format(os.getpid())) ps=Pool(5) for i in range(10): # ps.apply(worker,args=(i,)) # 同步執(zhí)行 ps.apply_async(worker,args=(i,)) # 異步執(zhí)行 # 關(guān)閉進(jìn)程池,停止接受其它進(jìn)程 ps.close() # 阻塞進(jìn)程 ps.join() print("主進(jìn)程終止") if __name__ == '__main__': main()
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對億速云的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。