🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 定义一个线程函数 ~~~ threadFunc(para1,para2) ~~~ ## 定义一个线程对象 ~~~ th = threading.Thread(target=threadFunc,args=(para1,para2,…)) ~~~ ## 启动线程 ~~~ th.start() ~~~ ## 使用锁 ~~~ acquire 上锁 release 解锁 ~~~ ## 单线程案例 ``` #引用时间类 import time #定义函数 def ban_zhuan(name): #输出板砖开始时间 print('%s开始板砖'%name) #暂停2秒 time.sleep(2) #输出结束板砖时间 print('%s结束板砖,一共搬了一万块转'%name) if __name__ == '__main__': #开始时间 start_time = time.time() #循环 for i in range(3): ban_zhuan('张三') #结束时间 end = time.time() print('一共花费了%s'%(end-start_time)) ``` ## 多线程案例 ``` import time from threading import Thread def ban_zhuan(name): print("%s开始板砖...."%name) time.sleep(2) print('%s结束板砖,一共搬了一万块砖'%name) if __name__ == '__main__': thread_list = [] start_time = time.time() #开始时间 for i in range(1,4): th = Thread(target=ban_zhuan,args=('员工%s'%i,)) thread_list.append(th) # print(thread_list) for t in thread_list: t.start() for t in thread_list: t.join() #子线程同步 主线程等待子线程完成再结束 end_time = time.time() #结束时间 print('一共花费了%s'%(end_time-start_time)) ``` ## 通过线程池控制线程数 ``` from concurrent.futures import ThreadPoolExecutor #导入线程类 import time def ban_zhuan(name): print("%s开始板砖...."%name) time.sleep(2) print('%s结束板砖,一共搬了一万块砖'%name) with ThreadPoolExecutor(max_workers=10) as pool: for i in range(100): pool.submit(ban_zhuan,i) ``` ## 数据共享 ``` from threading import Thread def read_num(nums): for i in nums: print(i) def update_num(nums): for i in nums[::-1]: nums[i] = 0 if __name__ == '__main__': nums = list(range(1000)) read_th = Thread(target=read_num,args=(nums,)) update_th = Thread(target=update_num,args=(nums,)) read_th.start() update_th.start() ``` ## 互斥锁 ``` from threading import Thread,Lock def read_num(nums,lock): lock.acquire() #获取锁 for i in nums: print(i) lock.release() #释放锁 def update_num(nums,lock): lock.acquire() #获取锁 for i in nums[::-1]: nums[i] = 0 lock.release() #释放锁 if __name__ == '__main__': nums = list(range(1000)) lock = Lock() read_th = Thread(target=read_num, args=(nums,lock)) update_th = Thread(target=update_num, args=(nums,lock)) read_th.start() update_th.start() ``` ## 多线程交替打印练习 ``` from threading import Thread def print_info(name,delay): for i in range(10): print(name) time.sleep(delay) if __name__ == '__main__': php = Thread(target=print_info,args=('php',2)) python = Thread(target=print_info,args=('python',2)) php.start() python.start() ```