Python模块·Threading线程

一、概念:

  • threadthreading模块允许程序员创建和管理线程
  • 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容