线程就是一个进程的实例,但是在python中当我们运行计算密集型的程序时,cpu的效率会很低,所以使用线程执行的程序一般都是I/O操作的程序,如输入输出,文件的读写,socket通信,一般情况下主线程必须等待子线程运行结束,主线程才能结束
在python中创建线程的记中方式,以及常用的关于线程的内容如下:
- 普通创建线程的基本语法
import threading
import time
#普通创建线程的方式
def target_fun(args):
time.sleep(args)
print(args)
t1 = threading.Thread(target=target_fun,args=(3,))
t1.start()
print(123)
- 通过面向对象创建线程,线程的本质就是在Thread中执行一个run方法,调用底层的方法
class MyThread(threading.Thread):
def run(self):
print(123,self._args,self._kwargs)
t1 = MyThread(args=(1,2,3))
t1.start()
t2 = MyThread(args=(9,10,11))
t2.start()
- 设置主线程不等待子线程运行结束
def target_fun(args):
time.sleep(3)
print(args,end="\n")
t1 = threading.Thread(target=target_fun,args=(3,))
t1.setDaemon(True) #setDaemon(True/False) True表示主线程不等待子线程运行结束,False表示主线程必须等待子线程运行结束
t1.start()
t2 = threading.Thread(target=target_fun,args=(9,))
t2.setDaemon(True)
t2.start()
print(123)
- 自定义主线程最多等待子线程时间
def target_func(args):
time.sleep(30)
print(args)
print("创建线程t1")
t1 = threading.Thread(target=target_func,args=(3,))
t1.start()
t1.join(1) #表示最多等待线程1s join中的参数表示最多等待线程多长时间
print("创建线程t2")
t2 = threading.Thread(target=target_func,args=(9,))
t2.start()
t2.join(1)
print(123)
- 设置/获取当前运行线程的名称
def target_func(args):
v1=threading.current_thread() #获得当前运行的线程对象
print(v1.getName(),end="\n") #打印当前线程的名称
print(args)
time.sleep(3)
t1 = threading.Thread(target=target_func,args=(3,))
t1.setName("线程1") #设置线程的名字
t1.start()
t2 = threading.Thread(target=target_func,args=(9,))
t2.setName("线程2")
t2.start()