**
注:理解线程的概念
**
import threading
通过这个库可以很方便的实现多线程。
t=threading.Thread(target=定义的函数名,args=(传入的参数/定义的list ,))
这个就是线程的写法
多线程的话可以:定义一个list封装 def写函数 接口后面for循环遍历
此段代码为引用,可以理解构造函数的写法
import time
import threading
sum=0
starttime = time.time()
for i in range(10000000):
sum +=i
print(f'花费了{starttime}秒')
""" 花费了1559030838.824035秒 """
#两件事情为了模拟消耗的时间
def playmusic(name):
print(f'{name}开始 播放音乐,现在时间{time.ctime()}')
time.sleep(2)
print(f'{name}停止 播放音乐,现在时间{time.ctime()}')
def playgame(name):
print(f'{name}开始 播放音乐,现在时间{time.ctime()}')
time.sleep(4)
print(f'{name}停止 播放音乐,现在时间{time.ctime()}')
if __name__=='__main__':
playmusic("lujaijun")
playgame('lujiajun')
print(f'结束,现在时间{time.ctime()}')
""" lujaijun开始 播放音乐,现在时间Tue May 28 16:07:20 2019
lujaijun停止 播放音乐,现在时间Tue May 28 16:07:22 2019
lujiajun开始 播放音乐,现在时间Tue May 28 16:07:22 2019
lujiajun停止 播放音乐,现在时间Tue May 28 16:07:26 2019
结束,现在时间Tue May 28 16:07:26 2019
"""
用的线程,threading.Thread()这个函数.方法,表示的是线程
targrt参数,+要处理的函数名 args +被处理函数的参数
arg 是元祖,如果是单个元素,要加逗号,否则会被当成字符串
一种方式,用的装饰器
def runtime(func): #func是默认是参数
def wrapper(*arges,**kwargs): #*,代表的元组。**代表的字典
starttime = time.time()
func(*arges,**kwargs)
endtime = time.time() #time.time()获取当前时间
print(f'运行了{endtime-starttime}秒')
return wrapper
# @runtime
def playmusic(name): #这里面的name,会传入装饰器里,将func改为name
print(f'{name}开始 播放音乐,现在时间{time.ctime()}')
time.sleep(2)
print(f'{name}停止 播放音乐,现在时间{time.ctime()}')
# @runtime
def playgame(name):
print(f'{name}开始 播放音乐,现在时间{time.ctime()}')
time.sleep(4)
print(f'{name}停止 播放音乐,现在时间{time.ctime()}')
if __name__=='__main__':
#多线程的表现形式
#表示产生了一个线程。通常赋予一个变量,后期方便放到线程池里面,
threaada=threading.Thread(target=playmusic,args=("lujiajun",))
#函数名,参数。args=("lujiajun",)表示一个元组。只有一个元素的元组是这样表示的,记住有一个逗号
threadb= threading.Thread(target=playgame, args=("lujiajun",))
threaada.start()
threadb.start() # .start 表示启动
#线程简易的表现形式
"""
这是多线程得。
将单个线程放入list 里面,for循环遍历追加入list,最后执行
. join 阻塞
线程多的时候可以将其放入一个list中使用:
def playmusic(name):
print(f'{name}开始 播放音乐,现在时间{time.ctime()}')
time.sleep(2)
print(f'{name}停止 播放音乐,现在时间{time.ctime()}')
def playgame(name):
print(f'{name}开始 播放音乐,现在时间{time.ctime()}')
time.sleep(4)
print(f'{name}停止 播放音乐,现在时间{time.ctime()}')
if __name__ == '__main__':
thredlist = []
**threaada = threading.Thread(target=playmusic, args=("lujiajun",)
**threadb = threading.Thread(target=playgame, args=("lujiajun",))
thredlist.append(threaada) # 既然是list就会有append操作,追加到list里
thredlist.append(threadb) #此操作将线程追加到了list
#遍历list去执行
for i in thredlist:
i.start()
#将最后一个子线程阻塞主线程,只有该子线程执行完成后,主线程才能执行
i.join #join函数,理解为阻塞
#阻塞放在外面,是按着上述所执行。放在里面的话就会成为单线程。
print(f'结束,现在{time.ctime()}')
"""
lujiajun开始 播放音乐,现在时间Tue May 28 20:42:54 2019
lujiajun停止 播放音乐,现在时间Tue May 28 20:42:56 2019
lujiajun停止 播放音乐,现在时间Tue May 28 20:42:58 2019
结束,现在Tue May 28 20:42:58 2019
"""
来源:https://blog.csdn.net/weixin_44812034/article/details/100103405