多线程编程threading
操作系统能够调度和切换的最小单元实际上是线程。 1.使用多线程编程的两种方法(1)直接实例化一个Thread对象from threading import Thread import time def task1(): print("task1开始执行") time.sleep(5) print("task1执行结束") def task2(): print("task2开始执行") time.sleep(3) print("task2结束执行") if __name__ == "__main__": t1 = Thread(target=task1) t2 = Thread(target=task2) start_time = time.time() t1.start() t2.start() run_time = time.time() - start_time print("执行时间:%s"%run_time) 执行结果: ? t1和t2属于并发执行,t1和t2开始之后,并不会等到执行完毕之后再执行下面的代码。 在主线程结束之后,会等待其中的子线程全部执行完毕之后才会退出,不然就不会打印子线程的结果信息。 如果你希望一定要等待线程执行完成,可以适用join。 from threading import Thread import time def task1(): print("task1开始执行") time.sleep(5) print("task1执行结束") def task2(): print("task2开始执行") time.sleep(3) print("task2结束执行") if __name__ == "__main__": t1 = Thread(target=task1) t1.setDaemon(True) #主线程不用等待t1执行完毕之后才退出,但是依然要等待t2执行完毕。 t2 = Thread(target=task2) start_time = time.time() t1.start() t2.start() t1.join() t2.join() run_time = time.time() - start_time print("执行时间:%s"%run_time) 执行结果: task1开始执行 task2开始执行 task2结束执行 task1执行结束 执行时间:5.0016233921051025 加入join之后,不管你是否设置了守护线程,都会等到线程执行结束,才会接着往下执行。 ? (2)直接继承Thread类,重写run方法from threading import Thread import time class T1(Thread): def run(self): print("task1开始执行") time.sleep(5) print("task1执行结束") class T2(Thread): def run(self): print("task2开始执行") time.sleep(3) print("task2结束执行") if __name__ == "__main__": t1 = T1() t2 = T2() t1.start() t2.start() t1.join() t2.join() print("主线程结束") 两种方式其实是一样的,一个是作为子类一个是作为对象,方法和属性基本相同。 ? 2.Thread中的方法一览daemon:等于isDaemongetName:获取线程名ident:线程标识符isAlive:查看线程的运行状态isDaemon:是否是守护线程is_alivejoin:等待线程执行完毕name:property属性,可以给线程设置namerun:线程的逻辑部分,一般会重写这个方法setDaemon:设置守护线程setName:设置线程名start:开始执行线程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |