Python3基础-线程、进程
无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行
<python的线程与threading模块>
直接调用
import threading #线程 import time def sayhi(name): print("hello %s"%name) time.sleep(5) if __name__ == "__main__": t1 =threading.Thread(target=sayhi,args=("beijing",)) #生成一个线程实例 t1.start()#启动线程 print(t1.getName()) #获取线程名 ############################### hello beijing Thread-1 Process finished with exit code 0
import threading #线程 import time def sayhi(name): print("hello %s \n"%name) time.sleep(5) if __name__ == "__main__": t1 =threading.Thread(target=sayhi,args=("beijing",)) #生成一个线程实例 t2 = threading.Thread(target=sayhi,args=("FuJian",)) t1.start()#启动线程 t2.start()#启动线程 print(t1.getName()) #获取线程名 print(t2.getName()) ================================== hello beijing hello FuJian Thread-1 Thread-2
继承式调用
import threading import time class MyThread(threading.Thread): def __init__(self, num): threading.Thread.__init__(self) self.num = num def run(self): # 定义每个线程要运行的函数 print("running on number:%s" % self.num) time.sleep(3) if __name__ == '__main__': t1 = MyThread(1) t2 = MyThread(2) t1.start() t2.start() print("ending......")
Join&setDaemon方法
##Join方法
""" import threading #线程 import time def sayhi(): print("hello %s "%time.ctime()) time.sleep(5) print("stop to hello %s "%time.ctime()) def music(): print("begin to listen %s"%time.ctime()) time.sleep(3) print("stop to listen %s"%time.ctime()) if __name__ == "__main__": t1 =threading.Thread(target=sayhi) #生成一个线程实例 t2 = threading.Thread(target=music) t1.start()#启动线程 t2.start()#启动线程 print("ending......") ### hello Fri Aug 14 14:06:34 2020 begin to listen Fri Aug 14 14:06:34 2020 ending...... stop to listen Fri Aug 14 14:06:37 2020 stop to hello Fri Aug 14 14:06:39 2020
import threading #线程 import time def sayhi(): print("hello %s "%time.ctime()) time.sleep(5) print("stop to hello %s "%time.ctime()) def music(): print("begin to listen %s"%time.ctime()) time.sleep(3) print("stop to listen %s"%time.ctime()) if __name__ == "__main__": t1 =threading.Thread(target=sayhi) #生成一个线程实例 t2 = threading.Thread(target=music) t1.start()#启动线程 t2.start()#启动线程 t1.join() t2.join() print("ending......") #### hello Fri Aug 14 14:10:21 2020 begin to listen Fri Aug 14 14:10:21 2020 stop to listen Fri Aug 14 14:10:24 2020 stop to hello Fri Aug 14 14:10:26 2020 ending......
##setDaemon方法
import threading #线程 import time def sayhi(): print("hello %s "%time.ctime()) time.sleep(5) print("stop to hello %s "%time.ctime()) def music(): print("begin to music %s"%time.ctime()) time.sleep(3) print("stop to music %s"%time.ctime()) if __name__ == "__main__": t1 =threading.Thread(target=sayhi) #生成一个线程实例 t2 = threading.Thread(target=music) t1.setDaemon(True) ##注意:一定在start之前设置 t1.start()#启动线程 t2.start()#启动线程 print("ending......") ##### hello Fri Aug 14 14:19:17 2020 begin to music Fri Aug 14 14:19:17 2020 ending...... stop to music Fri Aug 14 14:19:20 2020

join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
setDaemon(True):
将线程声明为守护线程,必须在start() 方法调用之前设置, 如果不设置为守护线程程序会被无限挂起。这个方法基本和join是相反的。
当我们 在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程 就分兵两路,分别运行,那么当主线程完成
想退出时,会检验子线程是否完成。如 果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是 只要主线程
完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以 用setDaemon方法啦
其他方法
# run(): 线程被cpu调度后自动执行线程对象的run方法 # start():启动线程活动。 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。 threading模块提供的一些方法: # threading.currentThread(): 返回当前的线程变量。 # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 # threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
------------恢复内容结束------------
浙公网安备 33010602011771号