线程:
使用线程的三步鄹:
①导入模块
import threading
②创建子线程
sub_thread=threading.Thread(target=task)
③启动线程
sun_thread.start()
带参数创建线程:
import time
import threading
def musci(count,times):
for i in range(count):
print('唱歌')
time.sleep(times)
print('当前线程的名称:',threading.current_thread().name)#输入当前线程的名称
def sing(count,times):
for i in range(count):
print('跳舞')
time.sleep(times)
print('当前线程的名称:', threading.current_thread().name) # 输入当前线程的名称
if __name__=='__main__':
musci_threading=threading.Thread(target=musci,args=(5,0.2))#创建子线程
sing_threading=threading.Thread(target=sing,kwargs={'count':5,'times':0.2})
s=time.time()
musci_threading.start()#启动线程
sing_threading.start()
e=time.time()
print(e-s)
join():
join():主进程等待子进程执行结束,然后再继续执行
def task():
time.sleep(1)
print('当前线程:',threading.current_thread().name)
if __name__=='__main__':
for i in range(5):
sub_thread=threading.Thread(target=task)
sub_thread.start()
sub_thread.join()
注意点:
-
线程之间执行是无序的
def task(): time.sleep(1) print('当前线程:',threading.current_thread().name) if __name__=='__main__': for i in range(5): sub_thread=threading.Thread(target=task) sub_thread.start()
-
主线程会等待子线程结束再结束:设置守护主线程
#1. sub_thread=threading.Thread(target=task,daemon=True)
#2. setDaemon(True)
-
线程之间可以共享全局变量
import threading import time li=[] def add(): global li for i in range(5): li.append(i) print('添加成功:',li) time.sleep(1) def read(): global li print(li) if __name__ == '__main__': add_thre=threading.Thread(target=add) read_thre=threading.Thread(target=read) add_thre.start() add_thre.join() read_thre.start()
-
线程之间共享全局变量数据出现异常的问题
import threading g_sum=0 def sum1(): global g_sum for i in range(10000): g_sum+=i print('sum1:',g_sum) def sum2(): global g_sum for i in range(10000): g_sum += i print('sum2:', g_sum) if __name__ == '__main__': sum1_t=threading.Thread(target=sum1) sum2_t=threading.Thread(target=sum2) sum1_t.start() sum2_t.start()