开启进程的两种方法
開啟進(jìn)程的兩種方法
使用multiprocessing模塊, multiprocessing模塊用來(lái)開啟子進(jìn)程,并在子進(jìn)程中執(zhí)行我們定制的任務(wù)(比如函數(shù)),該模塊與多線程模塊threading的編程接口類似。multiprocessing模塊的功能眾多:支持子進(jìn)程、通信和共享數(shù)據(jù)、執(zhí)行不同形式的同步,>提供了Process、Queue、Pipe、Lock等組件。
Process的類:
創(chuàng)建進(jìn)程的類:
參數(shù)介紹:
group參數(shù)未使用,值始終為Nonetarget表示調(diào)用對(duì)象,即子進(jìn)程要執(zhí)行的任務(wù)args表示調(diào)用對(duì)象的位置參數(shù)元組,args=('name',)kwargs表示調(diào)用對(duì)象的字典,kwargs={'name':'name'}name為子進(jìn)程的名稱方法介紹:
p.start():啟動(dòng)進(jìn)程,并調(diào)用該子進(jìn)程中的p.run() p.run():進(jìn)程啟動(dòng)時(shí)運(yùn)行的方法,正是它去調(diào)用target指定的函數(shù),我們自定義類的類中一定要實(shí)現(xiàn)該方法 p.terminate():強(qiáng)制終止進(jìn)程p,不會(huì)進(jìn)行任何清理操作,如果p創(chuàng)建了子進(jìn)程,該子進(jìn)程就成了僵尸進(jìn)程,使用該方法需要特別小心這種情況。如果p還保存了一個(gè)鎖那么也將不會(huì)被釋放,進(jìn)而導(dǎo)致死鎖 p.is_alive():如果p仍然運(yùn)行,返回Truep.join([timeout]):主線程等待p終止(強(qiáng)調(diào):是主線程處于等的狀態(tài),而p是處于運(yùn)行的狀態(tài))。timeout是可選的超時(shí)時(shí)間。屬性介紹:
p.daemon:默認(rèn)值為False,如果設(shè)為True,代表p為后臺(tái)運(yùn)行的守護(hù)進(jìn)程,當(dāng)p的父進(jìn)程終止時(shí),p也隨之終止,并且設(shè)定為True后,p不能創(chuàng)建自己的新進(jìn)程,必須在p.start()之前設(shè)置p.name:進(jìn)程的名稱p.pid:進(jìn)程的pid方法一:
!/usr/bin/env python3 -*- coding:utf-8 -*-from multiprocessing import Processimport time # 開啟子進(jìn)程的方法一: def task(name):print('%s is runing'%name)time.sleep(3)print('%s is done'%name)if __name__ == '__main__':p = Process(target=task,args=('子進(jìn)程',)) # 方法調(diào)用1p = Process(target=task,kwargs={'name':'子進(jìn)程1'}) # 方法調(diào)用2p.start()print('A')方法二:
from multiprocessing import Process import time class My_process(Process): # 繼承Process類def __init__(self,name):super().__init__() # 繼承init方法self.name = namedef run(self): # 固定寫法print('%s is runing'%self.name)time.sleep(3)print('%s id done'%self.name)if __name__ == '__main__':p = My_process('子進(jìn)程')p.start() # 僅僅只是給系統(tǒng)發(fā)送了一個(gè)指令,但管不到操作系統(tǒng)的運(yùn)行print('b')查看PID的方法:
使用os模塊:
os.getpid(): 查看本身的PID
os.getppid():查看父PID
轉(zhuǎn)載于:https://www.cnblogs.com/yjiu1990/p/9263279.html
總結(jié)
- 上一篇: Mac OS X是什么
- 下一篇: openSUSE是什么