Python中threading模块如何实现多线程操作?

2026-06-11 10:081阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1001个文字,预计阅读时间需要5分钟。

Python中threading模块如何实现多线程操作?

源代码+为了梳理16点后加班的版本,添加“版本挂测升级降级的使命,Python小白写起了脚本。以下是使用的部分,惊喜!--bs4. BeautifulSoup(为了监测环境是否编译完成)--+urllib.request.urlopen(为了)”

渊源

  为了摆脱6点后加班 "等版本挂测升降级" 的宿命,python小白硬是写起了脚本。以下是用到的部分,惊喜。 

--bs4.BeautifulSoup    (为了监测固件是否编译完成) --urllib.request.urlopen (为了自动下载固件) --hashlib          (为了校验下载下来的固件是否正确) --serial          (为了自动烧写固件) --selenium.webdriver   (为了自动页面升降级循环/自动重启循环) --threading        (为了操作浏览器的同时记录串口日志) --类            (为了代码简洁而进行了封装)。
--re            (正则表达式,功不可没)

线程概念

一个进程可有多个线程,这些线程共享该进程所拥有的全部资源。

python3线程模块

python3线程模块有两个threading和_thread,threading对_thread进行了封装。我们只需要使用threading这个模块就好。

threading模块

模块方法

  • current_thread() 返回当前线程对象
  • active_count() 返回当前活着的线程对象数量

Thread类

创建线程对象

import threading
threading.Thread(target=None, name=None, args=())

  • target 需要调用的函数名
  • name 线程名,自定义
  • args 函数需要的参数,以元组( tuple)的形式传入

线程方法

  • run()用以表示线程活动的方法
  • start() 启动线程
  • join() 等待至线程中止
  • getName() 返回线程名 threading.current_thread().getName()
  • setDaemon(True) 设置为守护进程

创建线程类

直接创建threading.Thread的子类,来创建一个线程对象实现多线程。

通过继承Thread类,并重写Thread类的run()方法,在run()方法中定义具体要执行的任务。

在Thread类中,提供了一个start()方法用于启动新进程,线程启动后会自动调用run()方法。

import threading,time class MyThread(threading.Thread): def __init__(self, threadName,num): threading.Thread.__init__(self) self.name = threadName self.num = num def run(self): for i in range(self.num): print("{0} i={1}".format(threading.current_thread().getName(), i)) time.sleep(0.1) if __name__ == ‘__main__‘: t1 = MyThread("thread1",3) t1.start() 创建线程类

守护线程

子线程用到join()函数,主线程需要依赖子线程执行完毕后才能继续执行代码;

子线程不用join()函数,主线程和子线程是并行运行的,没有依赖关系,主线程执行完了,子线程可能还在执行;

子线程设定为了守护线程,守护线程会等待主线程运行完毕后被销毁。一个主线程可以设置多个守护线程。

设置线程对象为守护线程,一定要在线程对象调用start()函数前设置。

Lock类

线程锁

多线程同时修改全局变量时会出现脏数据的线程安全问题。

解决方法:多线程访问时,采用加"互斥"锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。

# 创建锁对象 mutex = threading.Lock() # 获取锁,锁定 mutex.acquire() # 释放锁 mutex.release()

线程同步

Python中threading模块如何实现多线程操作?

本文共计1001个文字,预计阅读时间需要5分钟。

Python中threading模块如何实现多线程操作?

源代码+为了梳理16点后加班的版本,添加“版本挂测升级降级的使命,Python小白写起了脚本。以下是使用的部分,惊喜!--bs4. BeautifulSoup(为了监测环境是否编译完成)--+urllib.request.urlopen(为了)”

渊源

  为了摆脱6点后加班 "等版本挂测升降级" 的宿命,python小白硬是写起了脚本。以下是用到的部分,惊喜。 

--bs4.BeautifulSoup    (为了监测固件是否编译完成) --urllib.request.urlopen (为了自动下载固件) --hashlib          (为了校验下载下来的固件是否正确) --serial          (为了自动烧写固件) --selenium.webdriver   (为了自动页面升降级循环/自动重启循环) --threading        (为了操作浏览器的同时记录串口日志) --类            (为了代码简洁而进行了封装)。
--re            (正则表达式,功不可没)

线程概念

一个进程可有多个线程,这些线程共享该进程所拥有的全部资源。

python3线程模块

python3线程模块有两个threading和_thread,threading对_thread进行了封装。我们只需要使用threading这个模块就好。

threading模块

模块方法

  • current_thread() 返回当前线程对象
  • active_count() 返回当前活着的线程对象数量

Thread类

创建线程对象

import threading
threading.Thread(target=None, name=None, args=())

  • target 需要调用的函数名
  • name 线程名,自定义
  • args 函数需要的参数,以元组( tuple)的形式传入

线程方法

  • run()用以表示线程活动的方法
  • start() 启动线程
  • join() 等待至线程中止
  • getName() 返回线程名 threading.current_thread().getName()
  • setDaemon(True) 设置为守护进程

创建线程类

直接创建threading.Thread的子类,来创建一个线程对象实现多线程。

通过继承Thread类,并重写Thread类的run()方法,在run()方法中定义具体要执行的任务。

在Thread类中,提供了一个start()方法用于启动新进程,线程启动后会自动调用run()方法。

import threading,time class MyThread(threading.Thread): def __init__(self, threadName,num): threading.Thread.__init__(self) self.name = threadName self.num = num def run(self): for i in range(self.num): print("{0} i={1}".format(threading.current_thread().getName(), i)) time.sleep(0.1) if __name__ == ‘__main__‘: t1 = MyThread("thread1",3) t1.start() 创建线程类

守护线程

子线程用到join()函数,主线程需要依赖子线程执行完毕后才能继续执行代码;

子线程不用join()函数,主线程和子线程是并行运行的,没有依赖关系,主线程执行完了,子线程可能还在执行;

子线程设定为了守护线程,守护线程会等待主线程运行完毕后被销毁。一个主线程可以设置多个守护线程。

设置线程对象为守护线程,一定要在线程对象调用start()函数前设置。

Lock类

线程锁

多线程同时修改全局变量时会出现脏数据的线程安全问题。

解决方法:多线程访问时,采用加"互斥"锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。

# 创建锁对象 mutex = threading.Lock() # 获取锁,锁定 mutex.acquire() # 释放锁 mutex.release()

线程同步

Python中threading模块如何实现多线程操作?