threading.Thread类详解
1.创建进程2.Process类语法详解3.进程间通信4.进程池5.进程间的锁和信号量6.根据进程编号杀死指定进程os.kill7.守护进程8.线程9.实现多线程多任务的步骤
10.threading.Thread类详解
11.守护线程&&threading.enumerate()12.python线程并行执行与java的线程并行执行的对比13.IO密集型任务与CPU密集型任务14.多线程共享全局变量的问题15.多线程共享资源之竞态条件16.互斥锁17.死锁18.线程池19.进程与线程的对比20.闭包21.闭包之nonlocal关键字的作用22.闭包之作用23.闭包之可能引起的问题24.弱引用25.装饰器26.装饰器示例27.property 属性28.with语句和上下文管理器详解、最佳实践、示例29.生成器30.深浅拷贝31.正则表达式1 ''' 2 threading.Thread类是Python threading模块中用于创建和管理线程的主要类。它可以通过子类化并重写run()方法来定义自己的线程逻辑。一般会使用线程池 3 1. 构造器: 4 threading.Thread类的构造器如下: 5 class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None) 6 1. group:不常用,为了向后兼容而保留。 7 2. target:指定线程要执行的可调用对象(函数)。 8 3. name:线程的名称。 9 3. args:传递给target函数的位置参数,以元组形式提供(元组方式传参一定要和参数的顺序保持一致。)。 10 4. kwargs:传递给target函数的关键字参数,以字典形式提供(字典方式传参字典中的key一定要和参数名保持一致)。 11 5. daemon:指定线程是否为守护线程,默认为None即非守护线程 12 13 2. 常用方法: 14 1. start():启动线程,使其开始执行任务(如果有重写run方法就自动执行run方法或执行构造器target参数指定的函数/方法) 15 2. join(timeout=None):等待线程执行完成。如果指定了timeout参数,表示最长等待时间,超过该时间后仍未完成,则继续执行后续代码。 16 3. is_alive():检查线程是否仍然活动。 17 4. getName():获取线程的名称。 18 5. setName(name):设置线程的名称。 19 6. ident:线程的唯一标识符,只读属性。也可通过thread_id = threading.get_ident()获取当前线程的id 20 21 22 ''' 23 import threading 24 import time 25 26 27 def task(name): 28 print(f"Thread {name} started") 29 time.sleep(2) # 模拟耗时操作 30 print(f"Thread {name} finished") 31 32 33 def main(): 34 thread1 = threading.Thread(target=task, args=("Thread 1",)) 35 thread2 = threading.Thread(target=task, args=("Thread 2",)) 36 37 thread1.start() 38 thread2.start() 39 40 thread1.join() 41 thread2.join() 42 43 print("All threads completed") 44 45 46 if __name__ == "__main__": 47 main()
输出:
1 2 3 4 5 | Thread Thread 1 started Thread Thread 2 started Thread Thread 2 finished Thread Thread 1 finished All threads completed |
继承Thread类创建线程实现多线程多任务的方式:
1 import threading 2 import time 3 4 5 class MyThread(threading.Thread): 6 def __init__(self, name): 7 super().__init__() 8 self.name = name 9 10 def run(self): 11 print(f"Thread {self.name} started") 12 time.sleep(2) # 模拟耗时操作 13 print(f"Thread {self.name} finished") 14 15 16 def main(): 17 thread1 = MyThread("Thread 1") 18 thread2 = MyThread("Thread 2") 19 20 thread1.start() 21 thread2.start() 22 23 thread1.join() 24 thread2.join() 25 26 print("All threads completed") 27 28 29 if __name__ == "__main__": 30 main()
输出:
1 2 3 4 5 | Thread Thread 1 started Thread Thread 2 started Thread Thread 1 finished Thread Thread 2 finished All threads completed |
自定义线程类:
1.让自定义类 继承threading.Thread
2.让自定义类 重写run方法
3.通过实例化自定义类对象.start() 方法启动自定义线程
而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示