‘‘‘目录1,开启线程的两种方式*****2,线程和进程的区别*****3,线程对象的其他方法和属性4,守护线程5,互斥锁6,死锁现象与递过锁7,信号量‘‘‘#1 开启线程的两种方式import timefrom threading import Thread def dask(name): print(‘%s is running ‘%name) time.sleep(1) print(‘%s is done‘%name) t=Thread(target=dask,args=(‘egon‘,))t.start()print(‘主‘) # 第二种class Mythread(Thread): def __init__(self,name): super(Mythread, self).__init__() self.name=name def run(self): print("%s is running "%self.name) print(‘%s is done‘%self.name) t=Mythread(‘alex‘)t.start()print(‘主‘) # --------------------进程VS线程VS区别--------------------#1,线程的开启速度快,线程执行完代码不再存活# 主线程执行完毕等所有非守护线程执行完毕才会死亡,因为主进程要回操作系统收资源,# 如果子线程还没结束就进行回收,那么子线程就找不到数据 from threading import Threadfrom multiprocessing import Processimport time def task(name): print(‘%s is running ‘%name) time.sleep(2) print(‘%s is done ‘%name) if __name__ == ‘__main__‘: t=Thread(target=task,args=(‘子线程‘,)) t.start() print(‘主 ‘) #2.同一进程下的多个线程共享该进程内的数据,子线程可以修改该进程内的数据被其他子线程调用#子进程修改全局变量修改的只是自己的,子进程无法修改父进程的资源,因为空间都是物理上的隔离from threading import Threadimport timex=100def dask(): global x x=88 print(x) time.sleep(1) #开启多个子进程多个子进程的PID 都是不一样的,开启多个子线程,多个子线程和主线程的Pid都是一致的 t=Thread(target=dask)t.start()t.join() #会等子线程运行完毕才往下走print(‘主‘,x) #查看pidfrom threading import Threadimport os,time def task(): print(os.getpid()) t=Thread(target=task)t.start()print(‘主‘,os.getpid()) # ======================线程对象的其他方法和属性==================##主进程等子进程是因为主进程要给子进程收尸#进程必须等待其内部所有线程都隐形完毕才结束from threading import current_thread,active_count,enumerateimport time def task(name): print(‘%s is running ‘%name) time.sleep(2) print(‘%s is done‘%name) t=Thread(target=task,args=(‘子线程‘,))t.start()print(‘主‘) # ------------------------------------------def task(): print(‘%s is running ‘%current_thread().name) time.sleep(2) print(‘%s is done‘%current_thread().name)#查看当前进程的名字 print(‘走到这了‘)t=Thread(target=task,name=‘xxx‘)t.start()t.join()print(t.is_alive())#判断进/线程是否存活print(t.getName())#拿到线程对象的名字xxxprint(enumerate()) current_thread().setName(‘主线程‘)print(‘主‘,current_thread().name)#拿到当前线程的名字 # Thread实例对象的方法# isAlive(): 返回线程是否活动的。# getName(): 返回线程名。# setName(): 设置线程名。 # threading模块提供的一些方法:# threading.currentThread(): 返回当前的线程变量。# threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。# threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
原文地址:https://www.cnblogs.com/lijieshi/p/9306826.html
时间: 2025-01-02 06:10:33