Python档案袋(线程 )
Python的进程和线程是使用的操作系统的原生线程和进程,其是去调用操作系统的相应接口实现 进程:之间不可直接共享数据,是资源的集合,进程必须有一个线程 线程:基于进程,之间可直接共享数据,可执行,只有所有的线程执行完毕程序才会退出 守护线程:生命值依赖于创建它的主线程,主程序亡,不管守护进程执行到何步也必须立即亡 多线程:不适用与cpu操作任务大的(如计算等),较适合于IO操作任务大的(如文件读写等) 线程实现简单的线程: 1 import threading 2 #线程实现方法,取名任意 3 def run11(varx): 4 print(@H_301_48@"@H_301_48@run11@H_301_48@",varx) 5 创建线程1 6 t1=threading.Thread(target=run11,args=(@H_301_48@var1111 7 t1.start() 8 创建线程2 9 t2=threading.Thread(target=run11,1)">var2222@H_301_48@10 t2.start() 类方法实现线程: class DongThreadx(threading.Thread): 3 构造方法,可以忽略不写 def @H_301_48@__init__(self,varx): 5 调用父类的构造方法 6 super(DongThreadx,self).@H_301_48@() 7 self.threadvar=varx 8 9 run方法名不能更改 10 run(self): 11 类线程:12 创建两个线程 13 t1=DongThreadx(@H_301_48@dongxiaodong11@H_301_48@) 14 15 t2=DongThreadx(@H_301_48@dognxiaodong22@H_301_48@16 t2.start() 守护线程实现:t2=threading.Thread(target=run11,))
t2.setDaemon(True) 使其成为主线程守护线程
t2.start()
线程补充其他方法: print(threading.current_thread()) 当前所属的线程 print(threading.active_count()) 当前活跃的总线程数 t1.join() 等待线程 t1 执行完毕 等待子线程执行完毕: 方法一: 使用join time 3 num=0 4 延时并自增1 6 run11(): 7 global num 8 time.sleep(2 9 num+=1 10 11 生成1000个线程 12 listthreadx=[] 13 for i in range(10000): 14 创建线程 15 t1=threading.Thread(target=run11,args=()) 16 listthreadx.append(t1) 17 t1.start() 18 19 等待1000个线程执行完毕,并输出结果 20 for t in listthreadx: 21 t.join() 22 23 总数为:@H_301_48@",num) 方法二: 如果使用【threading.active_count()】的值为1,也说明子线程执行完毕 while threading.active_count() !=1: pass 1 lockx=threading.Lock() 得到锁实例 2 3 4 lockx.acquire() 获取线程锁 5 6 num+=1 7 lockx.release() 释放线程锁 递归锁 【lockx=threading.RLock()】,实现锁和钥匙的一一对应,如果程序有内外嵌套锁时,可以使用其优化 信号量: 规定同时执行的最大线程数 1 blockx=threading.BoundedSemaphore(10) 表示10为最大同时启动线程数 4 blockx.acquire() 7 blockx.release() 释放线程锁 标志位: 在线程中封装了bool,实现了基本的标志位功能,其主要方法有: eventx=threading.Event() #得到event实例 eventx.set() #设置标志位 eventx.wait()#等待标志位设置,一直处于阻塞 eventx.clear() #清除标志位 3 4 eventx=threading.Event() 得到event实例 5 7 -----开始,等待标志位----@H_301_48@ 8 eventx.wait()等待标志位设置,一直处于阻塞 9 ---阻塞取消,执行完成------@H_301_48@10 eventx.clear() 清除标志位 11 run22(times): time.sleep(times) 14 eventx.set() 设置标志位 15 执行线程 17 t1=threading.Thread(target=run11,1)">18 19 延时线程 21 t2=threading.Thread(target=run22,args=(322 t2.start() (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |