Python模块·Threading线程
2023-01-07 本文已影响0人
技术老男孩
一、概念:
-
thread
和threading
模块允许程序员创建和管理线程 -
thread模块
提供了基本的线程和锁的支持,而threading
提供了更高级别、功能更强的线程管理功能 - 推荐使用更高级别的
threading模块
分类 | 关键字 / 函数 / 方法 | 说明 |
---|---|---|
模块 | import threading | 导入模块 |
threading.Thread(target=func) | 创建线程,返回线程对象 | |
threading.Thread(target=func,agrs=iterable | 创建线程,iterable可序列化,返回线程对象 | |
对象 | t=threading.Thread(target=func) | 创建线程对象 |
t.start() | 启动工作线程 |
二、使用示例:
- target=传入的是方法名
- args=传入函数所需要的参数,必须是序列化类型
import threading
import time
# 创建搬砖函数,带传参
def bz(count):
print("start....", count)
time.sleep(3)
print("end....")
time.sleep(3)
if __name__ == '__main__':
for i in range(5):
# 创建线程
t = threading.Thread(target=bz, args=(i,))
# 启动线程
t.start()
三、多线程练习:
需求:
- 通过 ping 测试主机是否可达
- 如果 ping 不通,不管什么原因都认为主机不可用
- 通过多线程方式实现并发扫描
import subprocess
import threading
# 函数
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()
四、补充:进程&进程的概念
- 进程是争夺 CPU 资源的最小单位,线程是程序执行的最小单位
-
线程的执行离不开进程的资源,进程的流转离不开线程的工作
进程&进程.png