类的反射器:
python class.py sys.argv[1]
#/usr/bin/env python # -*- coding:utf-8 -*- import sys class webserver(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print('server %s is starting'%self.host) def stop(self): print('server %s is stoping'%self.host) def restart(self): self.start() self.stop() if __name__ == "__main__": server = webserver('localhost','333') if hasattr(server,sys.argv[1]): #判断参数是否在实例中 func = getattr(server,sys.argv[1])#获取实例的内存地址 func()#执行实例的方法可以传参数
2.hashlib
>>> import hashlib >>> m= hashlib.md5() >>> m.update("www") >>> m.update(b"123") >>> print(m.hexdigest()) 202cb962ac59075b964b07152d234b70
3. 异常处理
#/usr/bin/env python # -*- coding:utf-8 -*- while True: num1 = input("num1:") num2 = input("num2:") try: num1 = int(num1) num2 = int(num2) sum = num1 + num2 except ValueError as e: print("vcalue err",e) except IndentationError as e: print("inde err",e) except Exception as e:#3.5写法 Exception 抓取所有错误 print("信息错误,请重新输入!!") print(e) print(sum)
4.线程和进程
线程是操作系统能够进行运算调度的最小单位,它包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
4.多线程实例:
#/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def sayhi(num):#定义每个线程要运行的函数 print("running on number:%s"%num) time.sleep(3) if __name__ == '__main__': t1 = threading.Thread(target=sayhi,args=(1,)) #生成一个线程实例 t2 = threading.Thread(target=sayhi,args=(2,)) #生成一个线程实例 t1.start() t2.start() print(t1.getName()) #获取线程名 print(t2.getName())
#/usr/bin/env python # -*- coding:utf-8 -*- import threading import time class MyThread(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) self.num = num def run(self):#定义每个线程要运行的函数 run写死的不能叫其他名字 print("running on number:%s"%self.num) time.sleep(3) if __name__ == '__main__': t1 = MyThread(1) t2 = MyThread(2) t1.start() t2.start()
如果后续需要继续执行等待前面线程结束使用t1.john()函数
#/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def sayhi(num):#定义每个线程要运行的函数 print("running on number:%s"%num) time.sleep(3) if __name__ == '__main__': ''' t1 = threading.Thread(target=sayhi,args=(1,)) #生成一个线程实例 t2 = threading.Thread(target=sayhi,args=(2,)) #生成一个线程实例 t1.start() t2.start() print(t1.getName()) #获取线程名 print(t2.getName()) ''' t_list = []#使用阻塞空列表 for i in range(10): t = threading.Thread(target=sayhi,args=[i,]) t.start() t_list.append(t) for i in t_list: i.join() print('#'*5)
#/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def addNum(): global num #在每个线程中都获取这个全局变量 print("--get num:",num) time.sleep(1) lock.acquire()#枷锁不能对时间 num -=1 #对此公告变量减一 lock.release()#释放锁 lock = threading.Lock()#线程锁 num = 100 thread_list = [] for i in range(100): t = threading.Thread(target=addNum) t.start() thread_list.append(t) for i in thread_list: i.join() print("final num:",num)
#/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def addNum(n): semapore.acquire()#获取信号量 time.sleep(1) print("num:%s"%n) semapore.release()#释放信号量 semapore = threading.BoundedSemaphore(2)#最大两个线程同时运行 thread_list = [] for i in range(20): t = threading.Thread(target=addNum,args=[i,]) t.start() thread_list.append(t) for i in thread_list: i.join()