併發:指的是任務數多餘cpu核數,通過作業系統的各種任務排程演算法,實現用多個任務「一起」執行(實際上總有一些任務不在執行,因為切換任務的速度相當快,看上去一起執行而已)
並行:指的是任務數小於等於cpu核數,即任務真的是一起執行的
.執行緒python的thread模組是比較底層的模組,python的threading模組是對thread做了一些包裝的,可以更加方便的被使用
多個執行緒執行,主線程等子執行緒結束後才結束執行
import threading
from time import sleep,ctime
defsing()
:for i in
range(3
):print
("正在唱歌...%d"
%i) sleep(1)
defdance()
:for i in
range(3
):print
("正在跳舞...%d"
%i) sleep(1)
if __name__ ==
'__main__'
:print
('---開始---:%s'
%ctime())
t1 = threading.thread(target=sing)
t2 = threading.thread(target=dance)
t1.start(
) t2.start(
)#sleep(5) # 遮蔽此行**,試試看,程式是否會立馬結束?
print
('---結束---:%s'
%ctime(
))
python的threading.thread類有乙個run方法,用於定義執行緒的功能函式,可以在自己的執行緒類中覆蓋該方法。而建立自己的執行緒例項後,通過thread類的start方法,可以啟動該執行緒,交給python虛擬機器進行排程,當該執行緒獲得執行的機會時,就會呼叫run方法執行執行緒。
執行緒共享全域性變數
在乙個程序內的所有執行緒共享全域性變數,很方便在多個執行緒間共享資料
缺點就是,執行緒是對全域性變數隨意遂改可能造成多執行緒之間對全域性變數的混亂(即執行緒非安全)
建立互斥鎖
# 建立鎖
mutex = threading.lock(
)# 鎖定
mutex.acquire(
)# 釋放
mutex.release(
)
多工udp案例
import socket
import threading
defsend_msg
(udp_socket)
:"""獲取鍵盤資料,並將其傳送給對方"""
while
true
:# 1. 從鍵盤輸入資料
msg =
input
("\n請輸入要傳送的資料:"
)# 2. 輸入對方的ip位址
dest_ip =
input()
# 3. 輸入對方的port
dest_port =
int(
input
("\n請輸入對方的port:"))
# 4. 傳送資料
udp_socket.sendto(msg.encode(
"utf-8"),
(dest_ip, dest_port)
)def
recv_msg
(udp_socket)
:"""接收資料並顯示"""
while
true
:# 1. 接收資料
recv_msg = udp_socket.recvfrom(
1024
)# 2. 解碼
recv_ip = recv_msg[1]
recv_msg = recv_msg[0]
.decode(
"utf-8"
)# 3. 顯示接收到的資料
print
(">>>%s:%s"%(
str(recv_ip)
, recv_msg)
)def
main()
:# 1. 建立套接字
udp_socket = socket.socket(socket.af_inet, socket.sock_dgram)
# 2. 繫結本地資訊
udp_socket.bind((""
,7890))
# 3. 建立乙個子執行緒用來接收資料
t = threading.thread(target=recv_msg, args=
(udp_socket,))
t.start(
)# 4. 讓主線程用來檢測鍵盤資料並且傳送
send_msg(udp_socket)
if __name__ ==
"__main__"
: main(
)
python 多工 執行緒(一)
python提供了兩個模組來實現多執行緒thread和threading 推薦 thread模組提供了基本的執行緒和鎖支援,threading提供的是更高階的完全的執行緒管理,且更方便操作。在 python3 中不能再使用 thread 模組。為了相容性,python3 將 thread 重新命名為...
Python 多工 執行緒同步
高階程式設計技巧 學習筆記 1.1 實現兩個執行緒一問一答 class xiaoai threading.thread def init self super init name 小艾同學 def run self print f 在 print f 你猜現在幾點了?class tianmao th...
多工 執行緒
建立函式 建立執行緒物件,並制定函式 開啟執行緒 import threading import time defwork1 1.定義函式 for i in range 5 print 正在掃地 i time.sleep 1 defmain 測試執行緒的基本使用 2.建立執行緒物件 t1 threa...