不畏惧

博客园 首页 新随笔 联系 订阅 管理

类的反射器:

 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()
信号量-同时允许多少个线程同时运行

 

posted on 2017-05-23 22:05  不畏惧  阅读(129)  评论(0编辑  收藏  举报