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