您的位置:首页 > 游戏 > 手游 > python——线程(Thread)加深了解学习

python——线程(Thread)加深了解学习

2025/1/8 2:43:36 来源:https://blog.csdn.net/W030321/article/details/141870262  浏览:    关键词:python——线程(Thread)加深了解学习

在Python中,线程(Thread)是实现并发执行的一种机制。它允许程序在执行过程中同时运行多个任务。虽然Python有一个全局解释器锁(GIL, Global Interpreter Lock),这限制了多线程在执行CPU密集型任务时的并行性,但在I/O密集型任务(如网络请求、文件操作等)中,多线程仍然可以显著提高程序的效率和响应速度。

个人初理解:

首先,什么是线程,线程到底有什么用呢?

在我的首次学习中,我认为,所有的东西都属于线程

线程是计算机中CPU进行任务调度的最小单位。线程属于进程的一部分,线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

在下面会使用Threding模块创建出线程,当然,在python强大的库中Queru、thred等也可创建线程

线程的基本概念

  • 线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
  • 进程:是系统进行资源分配和调度的一个独立单元。每个进程都有自己的内存空间和系统资源。

Python中的线程

Python标准库提供了threading模块来支持线程的创建和管理。

1. 创建线程

使用threading.Thread类可以创建线程。你需要定义一个目标函数(即线程执行的任务),然后创建Thread类的实例,将目标函数作为参数传递给实例。

import threading  def my_function():  print("Hello from my_function")  # 创建线程  
thread = threading.Thread(target=my_function)  # 启动线程  
thread.start()  # 主线程继续执行,不会等待上面的线程完成  
print("Main thread is continuing...")
2. 线程同步

由于多线程环境下,多个线程可能同时访问共享资源,这可能导致数据竞争和不一致的状态。因此,Python提供了多种同步机制来协调线程之间的执行,比如锁(Lock)、事件(Event)、条件变量(Condition)和信号量(Semaphore)等。

import threading  lock = threading.Lock()  def critical_section():  global count  with lock:  count += 1  print(f"Count: {count}")  count = 0  
threads = []  
for _ in range(10):  t = threading.Thread(target=critical_section)  threads.append(t)  t.start()  for t in threads:  t.join()  # 等待所有线程完成
3. 守护线程(Daemon Threads)

守护线程是主线程结束时自动退出的线程。默认情况下,线程不是守护线程。要设置守护线程,需要在启动线程之前将线程的daemon属性设置为True

import threading  
import time  def daemon_thread_function():  while True:  time.sleep(1)  print("Daemon thread is running")  # 创建一个守护线程  
daemon_thread = threading.Thread(target=daemon_thread_function)  
daemon_thread.daemon = True  
daemon_thread.start()  print("Main thread exiting...")

在上面的例子中,主线程将退出,不会等待守护线程完成。

注意事项

  • 由于GIL的存在,Python中的多线程并不适合用于CPU密集型任务。对于这类任务,应该考虑使用多进程(multiprocessing)或其他并发模型。
  • 对于I/O密集型任务,多线程可以显著提高程序性能。
  • 线程同步是避免数据竞争和保证程序正确性的重要手段,但过度使用同步机制也可能导致性能下降。
  • 守护线程在主线程退出时会自动退出,因此不能用于需要长时间运行的任务。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com