一、概念:
-
thread
和threading
模塊允許程序員創(chuàng)建和管理線程 -
thread模塊
提供了基本的線程和鎖的支持疾层,而threading
提供了更高級(jí)別将饺、功能更強(qiáng)的線程管理功能 - 推薦使用更高級(jí)別的
threading模塊
分類 | 關(guān)鍵字 / 函數(shù) / 方法 | 說明 |
---|---|---|
模塊 | import threading | 導(dǎo)入模塊 |
threading.Thread(target=func) | 創(chuàng)建線程,返回線程對(duì)象 | |
threading.Thread(target=func,agrs=iterable | 創(chuàng)建線程,iterable可序列化痛黎,返回線程對(duì)象 | |
對(duì)象 | t=threading.Thread(target=func) | 創(chuàng)建線程對(duì)象 |
t.start() | 啟動(dòng)工作線程 |
二予弧、使用示例:
- target=傳入的是方法名
- args=傳入函數(shù)所需要的參數(shù),必須是序列化類型
import threading
import time
# 創(chuàng)建搬磚函數(shù)湖饱,帶傳參
def bz(count):
print("start....", count)
time.sleep(3)
print("end....")
time.sleep(3)
if __name__ == '__main__':
for i in range(5):
# 創(chuàng)建線程
t = threading.Thread(target=bz, args=(i,))
# 啟動(dòng)線程
t.start()
三掖蛤、多線程練習(xí):
需求:
- 通過 ping 測(cè)試主機(jī)是否可達(dá)
- 如果 ping 不通,不管什么原因都認(rèn)為主機(jī)不可用
- 通過多線程方式實(shí)現(xiàn)并發(fā)掃描
import subprocess
import threading
# 函數(shù)
def ping(ip):
sub = subprocess.run(f"ping -c 2 {ip} &> /dev/null", shell=True)
print(ip, "up" if sub.returncode == 0 else "down")
if __name__ == '__main__':
ip_list = ["127.0.0.1", "192.168.99.100", "192.168.88.10", "192.168.88.210",
"192.168.88.100", "192.168.88.5", "192.168.88.15",
"www.baidu.com", "www.yahu.com", "www.douyin.com",
"www.qq.com", "www.163.com", "www.wangyi.com"]
for ip in ip_list:
t = threading.Thread(target=ping, args=(ip,))
t.start()
四井厌、補(bǔ)充:進(jìn)程&進(jìn)程的概念
- 進(jìn)程是爭(zhēng)奪 CPU 資源的最小單位蚓庭,線程是程序執(zhí)行的最小單位
-
線程的執(zhí)行離不開進(jìn)程的資源,進(jìn)程的流轉(zhuǎn)離不開線程的工作
進(jìn)程&進(jìn)程.png