import threading
from time import sleep
#线程函数
def task():
for i in range(3):
sleep(2)
print("任务")
#创建线程对象
t=threading.Thread(target=task)
t.start() #启动线程
t.join() #回收线程
from threading import Thread
from time import sleep
#含有参数的线程函数
def fun(sec,name):
print("线程函数")
sleep(sec)
print("%s执行完毕"%name)
#创建多个线程
jobs=[]
for i in range(3):
t=Thread(target=fun,args=(2,),kwargs={'name':'T%d'%i})
jobs.append(t) #存储线程对象
t.start()
for i in jobs:
i.join()
注:daemon为True时主线程退出分支线程也退出。要在start前设置,通常不和join一起使用
from threading import Thread
from time import sleep
import time
def fun():
sleep(3)
print("线程属性测试")
#线程默认名字 Thread-xxx
# t=Thread(target=fun)
# print(t.getName())
#修改线程名字
#方式一
# t=Thread(target=fun,name='tarena')
# print(t.getName())
#方式二
# t=Thread(target=fun)
# t.setName('tarena')
# print(t.getName())
from threading import Thread
from time import sleep
import time
def fun():
sleep(3)
print("线程属性测试")
t=Thread(target=fun)
#t.setDaemon(True) #主线程退出分支线程也退出
# 这个程序本身是主线程,t是子线程,
# 如果这个设置setDaemon为True,则fun没有执行print("线程属性测试")就要退出, 主人走了,小弟也要走
# 如果不设置setDaemon为True,则fun执行print("线程属性测试"), 主人走了,小弟完成自己的事,再走
t.start()
print("daemon",t.isDaemon())
使用于复杂场景
1.创建步骤
继承Thread类
重写__init__方法添加自己的属性,使用super加载父类属性
重写run方法
2.使用方法
实例化对象
调用start自动执行run方法
调用join回收线程
from threading import Thread
#自定义线程类
class ThreadClass(Thread):
#重写父类init
def __init__(self,*args,**kwargs):
self.attr=args[0]
super().__init__() #加载父类init
def f1(self):
print("step 1")
def f2(self):
print("step 2")
#重写run 逻辑调用
def run(self):
self.f1()
self.f2()
t=ThreadClass('abc')
t.start() #自动运行run
t.join()
from threading import Thread
from time import sleep,ctime
class MyThread(Thread):
def __init__(self,target=None,args=(),kwargs={}):
super().__init__() #此行不传参
self.target=target
self.args=args
self.kwargs=kwargs
def run(self):
self.target(*self.args,**self.kwargs)
##################################
def player(sec,song):
for i in range(3):
print("Playing %s:%s"%(song,ctime()))
sleep(sec)
t=MyThread(target=player,args=(3,),kwargs={'song':'凉'})
t.start()
t.join()