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密集型任务,多线程可以显著提高程序性能。
  • 线程同步是避免数据竞争和保证程序正确性的重要手段,但过度使用同步机制也可能导致性能下降。
  • 守护线程在主线程退出时会自动退出,因此不能用于需要长时间运行的任务。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值