Python——程式、執行緒、協程、多程式、多執行緒(個人向)
一、程式 執行緒 協程
1.程式
一個執行的程式就是一個程式,沒有執行的程式碼叫做程式。
程式是系統分配資源的最小單位,程式擁有自己獨立的記憶體空間 相對獨立,所以程式間的資料不共享,開銷大。
2.執行緒
CPU排程執行的最小單位(程式真正執行的時候呼叫的是執行緒),也叫執行路徑,依賴於程式存在,
一個程式最小存在一個執行緒,叫做主執行緒
而多個執行緒共享程式記憶體資源(資料共享,共享全域性變數),從而極大地提高了程式的執行效率。
一個程式中可以有一個或多個執行緒。一個執行緒只屬於一個程式。
一個程式中的多個執行緒是一種競爭關係。
3.協程
是一種使用者態的輕量級執行緒,協程的排程完全由使用者控制。
協程擁有自己的暫存器上下文和棧。 協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧,直接操作棧則基本沒有核心切換的開銷,可以不加鎖的訪問全域性變數,所以上下文的切換非常快。
二、多程式 多執行緒
1.多程式
(並行:兩個人每個人同時處理一個任務)
多程式模組:multiprocessing ,CPU密集型、IO計算型可以使用多程式
多程式的處理:
Process建立程式
Process([group [, target [, name [, args [, kwargs]]]]])
target:如果傳遞了函式的引用,可以讓這個子程式就執行函式中的程式碼
args:給 target 指定的函式傳遞的引數,以元組的形式進行傳遞
kwargs:給 target 指定的函式傳遞引數,以字典的形式進行傳遞
name:給程式設定一個名字,可以省略
group:指定程式組,大多數情況下用不到
常用方法:
start():啟動子程式例項(建立子程式)
is_alive():判斷程式子程式是否還在活著
terminate():不管任務是否完成,立即終止子程式Process 建立的例項物件的常用屬性:
name:當前程式的別名,預設為 Process-N,N 為從 1 開始遞增的整數
pid:當前程式的 pid(程式號)
import time
from multiprocessing import Process
def download1(name):
for i in range(1, 6):
print(f'{name}下載進度:{i * 20}%')
time.sleep(1)
def download2(name):
for i in range(1, 6):
print(f'{name}下載進度:{i * 20}%')
time.sleep(1)
if __name__ == '__main__':
# 建立程式 p1 p2
p1 = Process(target=download1, args=("圖片",))
p2 = Process(target=download2, args=("音樂",))
# 開啟程式
p1.start()
p2.start()
"""
音樂下載進度:20%
圖片下載進度:20%
圖片下載進度:40%
音樂下載進度:40%
圖片下載進度:60%音樂下載進度:60%
圖片下載進度:80%
音樂下載進度:80%
圖片下載進度:100%音樂下載進度:100%
"""
程式理解:
主程式從main()開始執行 → p1.start()時,建立一個子程式
pi子程式中的程式碼與主程式相同,只是程式執行的開始是download1函式 → 主程式執行到
p2.start()時,同樣賦值一份主程式程式碼從download2函式開始執行。
用程式方式來實現多工耗費資源較大,因為一個程式就需要使用一份系統資源
多執行緒
(併發:一個人處理兩個任務,處理過程中,可能會出現兩個任務交替的情況)
多執行緒模組:threading,IO密集型可以使用多執行緒
多執行緒的處理:
Thread建立執行緒
Thread([group [, target [, name [, args [, kwargs]]]]])
常用方法:
join():當前執行緒執行完後其他執行緒才會繼續執行(可以阻塞其他的,讓我自己先來)
setDaemon():當前執行緒設定成守護執行緒,主執行緒結束,子執行緒無論是否執行完畢,直接結束
threading模組提供的方法
threading.currentThread():返回當前的執行緒變數
threading.enumerate():返回一個包含正在執行的執行緒list,正在執行是指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒
threading.activeCount():與len(threading.enumerate) 相同;返回正在執行的執行緒數量
import time
from threading import Thread
def download1(name):
for i in range(1, 6):
print(f'{name}下載進度:{i * 20}%')
time.sleep(1)
def download2(name):
for i in range(1, 6):
print(f'{name}下載進度:{i * 20}%')
time.sleep(1)
if __name__ == '__main__':
# 1.建立執行緒
t1 = Thread(target=download1, args=('音樂',))
t2 = Thread(target=download2, args=('圖片',))
# 2.開啟執行緒
t1.start()
t2.start()
待完…
相關文章
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Python 多執行緒多程式Python執行緒
- 多執行緒,多程式執行緒
- Python 多執行緒及程式Python執行緒
- 入門python多執行緒/多程式Python執行緒
- Python的多程式和多執行緒Python執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒
- python 多執行緒程式設計Python執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- python多程式取代多執行緒的探究Python執行緒
- python 多程式和多執行緒學習Python執行緒
- [譯] Python 的多執行緒與多程式Python執行緒
- 協程、執行緒與程式執行緒
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- pytest(13)-多執行緒、多程式執行用例執行緒
- 多執行緒和多執行緒同步執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- 程式執行緒協程關係執行緒
- pytest多程式/多執行緒執行測試用例執行緒
- Android中的多程式、多執行緒Android執行緒
- 【java】【多執行緒】程式、執行緒的基本概念(1)Java執行緒
- python爬蟲入門八:多程式/多執行緒Python爬蟲執行緒
- Java多執行緒-程式執行堆疊分析Java執行緒
- python多執行緒中:如何關閉執行緒?Python執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 【騏程】多執行緒(上)執行緒
- python爬蟲之多執行緒、多程式+程式碼示例Python爬蟲執行緒
- PHP 的多程式與執行緒PHP執行緒
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- PyQt應用程式中的多執行緒:使用Qt還是Python執行緒?QT執行緒Python
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- Java多執行緒001——一圖讀懂執行緒與程式Java執行緒