本文從14大模塊展示了python高級用的應用。分別有Linux命令,多任務編程、網絡編程、Http協議和靜態Web編程、html+css、JavaScript、jQuery、MySql數據庫的各種用法、python的閉包和裝飾器、mini-web框架、正則表達式等相關文章的詳細講述。
Python全套筆記直接地址: 請移步這里
共 14 章,157 子模塊
進程
學習目標
- 能夠知道進程的作用
1. 進程的介紹
在Python程序中,想要實現多任務可以使用進程來完成,進程是實現多任務的一種方式。
2. 進程的概念
一個正在運行的程序或者軟件就是一個進程,它是操作系統進行資源分配的基本單位,也就是說每啟動一個進程,操作系統都會給其分配一定的運行資源(內存資源)保證進程的運行。
比如:現實生活中的公司可以理解成是一個進程,公司提供辦公資源(電腦、辦公桌椅等),真正干活的是員工,員工可以理解成線程。
注意:
一個程序運行后至少有一個進程,一個進程默認有一個線程,進程里面可以創建多個線程,線程是依附在進程里面的,沒有進程就沒有線程。
3. 進程的作用
單進程效果圖:
多進程效果圖:
說明:
多進程可以完成多任務,每個進程就好比一家獨立的公司,每個公司都各自在運營,每個進程也各自在運行,執行各自的任務。
4. 小結
- 進程是操作系統進行資源分配的基本單位。
- 進程是Python程序中實現多任務的一種方式
多進程的使用
學習目標
- 能夠使用多進程完成多任務
1 導入進程包
#導入進程包import multiprocessing
2. Process進程類的說明
Process([group [, target [, name [, args [, kwargs]]]]])
- group:指定進程組,目前只能使用None
- target:執行的目標任務名
- name:進程名字
- args:以元組方式給執行任務傳參
- kwargs:以字典方式給執行任務傳參
Process創建的實例對象的常用方法:
- start():啟動子進程實例(創建子進程)
- join():等待子進程執行結束
- terminate():不管任務是否完成,立即終止子進程
Process創建的實例對象的常用屬性:
name:當前進程的別名,默認為Process-N,N為從1開始遞增的整數
3. 多進程完成多任務的代碼
import multiprocessing
import time# 跳舞任務def dance():for i in range(5):print("跳舞中...")time.sleep(0.2)# 唱歌任務def sing():for i in range(5):print("唱歌中...")time.sleep(0.2)if __name__ == '__main__':# 創建跳舞的子進程# group: 表示進程組,目前只能使用None# target: 表示執行的目標任務名(函數名、方法名)# name: 進程名稱, 默認是Process-1, .....dance_process = multiprocessing.Process(target=dance, name="myprocess1")sing_process = multiprocessing.Process(target=sing)# 啟動子進程執行對應的任務dance_process.start()sing_process.start()
執行結果:
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
4. 小結
-
導入進程包
- import multiprocessing
-
創建子進程并指定執行的任務
- sub_process = multiprocessing.Process (target=任務名)
-
啟動進程執行任務
- sub_process.start()
進程編號
學習目標
- 能夠知道如果進程編號
1. 進程編號的目的
進程編號的目的是驗證主進程和子進程的關系,可以得知子進程是由那個主進程創建出來的。
進程編號的兩種操作
- 當前進程編號
- 當前父進程編號
2. 當前進程編號
os.getpid() 表示當前進程編號
示例代碼:
import multiprocessing
import time
import os# 跳舞任務def dance():# 當前進程的編號print("dance:", os.getpid())# 當前進程print("dance:", multiprocessing.current_process())for i in range(5):print("跳舞中...")time.sleep(0.2)# 擴展:根據進程編號殺死指定進程os.kill(os.getpid(), 9)# 唱歌任務def sing():# 當前進程的編號print("sing:", os.getpid())# 當前進程print("sing:", multiprocessing.current_process())for i in range(5):print("唱歌中...")time.sleep(0.2)if __name__ == '__main__':# 當前進程的編號print("main:", os.getpid())# 當前進程print("main:", multiprocessing.current_process())# 創建跳舞的子進程# group: 表示進程組,目前只能使用None# target: 表示執行的目標任務名(函數名、方法名)# name: 進程名稱, 默認是Process-1, .....dance_process = multiprocessing.Process(target=dance, name="myprocess1")sing_process = multiprocessing.Process(target=sing)# 啟動子進程執行對應的任務dance_process.start()sing_process.start()
執行結果:
main: 70763
main: <_MainProcess(MainProcess, started)>
dance: 70768
dance: <Process(myprocess1, started)>
跳舞中...
sing: 70769
sing: <Process(Process-2, started)>
唱歌中...
唱歌中...
唱歌中...
唱歌中...
唱歌中...
3. 當前父進程編號
os.getppid() 表示當前父進程編號
示例代碼:
import multiprocessing
import time
import os# 跳舞任務def dance():# 當前進程的編號print("dance:", os.getpid())# 當前進程print("dance:", multiprocessing.current_process())# 父進程的編號print("dance的父進程編號:", os.getppid())for i in range(5):print("跳舞中...")time.sleep(0.2)# 擴展:根據進程編號殺死指定進程os.kill(os.getpid(), 9)# 唱歌任務def sing():# 當前進程的編號print("sing:", os.getpid())# 當前進程print("sing:", multiprocessing.current_process())# 父進程的編號print("sing的父進程編號:", os.getppid())for i in range(5):print("唱歌中...")time.sleep(0.2)if __name__ == '__main__':# 當前進程的編號print("main:", os.getpid())# 當前進程print("main:", multiprocessing.current_process())# 創建跳舞的子進程# group: 表示進程組,目前只能使用None# target: 表示執行的目標任務名(函數名、方法名)# name: 進程名稱, 默認是Process-1, .....dance_process = multiprocessing.Process(target=dance, name="myprocess1")sing_process = multiprocessing.Process(target=sing)# 啟動子進程執行對應的任務dance_process.start()sing_process.start()
main: 70860
main: <_MainProcess(MainProcess, started)>
dance: 70861
dance: <Process(myprocess1, started)>
dance的父進程編號: 70860
跳舞中...
sing: 70862
sing: <Process(Process-2, started)>
sing的父進程編號: 70860
唱歌中...
唱歌中...
唱歌中...
唱歌中...
唱歌中...
4. 小結
-
當前進程編號
- os.getpid()
-
當前父進程編號
- os.getppid()
-
進程編號可以查看父子進程的關系
進程執行帶有參數的任務
學習目標
- 能夠寫出進程執行帶有參數的任務
1. 進程執行帶有參數的任務的介紹
前面我們使用進程執行的任務是沒有參數的,假如我們使用進程執行的任務帶有參數,如何給函數傳參呢?
Process類執行任務并給任務傳參數有兩種方式:
- args 表示以元組的方式給執行任務傳參
- kwargs 表示以字典方式給執行任務傳參
2. args參數的使用
示例代碼:
import multiprocessing
import time# 帶有參數的任務def task(count):for i in range(count):print("任務執行中..")time.sleep(0.2)else:print("任務執行完成")if __name__ == '__main__':# 創建子進程# args: 以元組的方式給任務傳入參數sub_process = multiprocessing.Process(target=task, args=(5,))sub_process.start()
執行結果:
任務執行中..
任務執行中..
任務執行中..
任務執行中..
任務執行中..
任務執行完成
3. kwargs參數的使用
示例代碼:
import multiprocessing
import time# 帶有參數的任務def task(count):for i in range(count):print("任務執行中..")time.sleep(0.2)else:print("任務執行完成")if __name__ == '__main__':# 創建子進程# kwargs: 表示以字典方式傳入參數sub_process = multiprocessing.Process(target=task, kwargs={"count": 3})sub_process.start()
執行結果:
任務執行中..
任務執行中..
任務執行中..
任務執行完成
4. 小結
-
進程執行任務并傳參有兩種方式:
- 元組方式傳參(args): 元組方式傳參一定要和參數的順序保持一致。
- 字典方式傳參(kwargs): 字典方式傳參字典中的key一定要和參數名保持一致。