1 2 3 4

【python之路33】开发模式单例模式及简单的服务器请求框架原理

1、单例模式指的是创建单个实例,例如:数据库连接池中包含10个数据库连接,用户访问数据时随机从连接池中拿出一个进行连接,其他用户再次访问时不再创建对象进行连接

#!usr/bin/env python
# -*- coding:utf-8 -*-
class ConnecttionPool:
    __instance = None
    def __init__(self):
        self.ip = '222.133.177.67'
        self.port = '3306'
        self.username = 'odoo'
        self.password = '123456'

        self.con_list = [1,2,3,4,5,6,7,8,9,10]
    @staticmethod
    def get_instance():  #创建实例的方法
        if ConnecttionPool.__instance:
            return ConnecttionPool.__instance
        else:
            ConnecttionPool.__instance = ConnecttionPool()
            return ConnecttionPool.__instance
    def get_connection(self):
        #获得连接
        import random
        r = self.con_list[random.randrange(1,10)]
        return r

for i in range(10):
    pool = ConnecttionPool.get_instance()
    print('去连接池',pool,'获得一个连接')
    r = pool.get_connection()
    print('获得的连接是:',r)
单例模式

2、简单的服务器请求框架

代码需要在2.7版本下运行

#!usr/bin/env python
# -*- coding:utf-8 -*-
from wsgiref.simple_server import make_server

def RunServer(environ,start_response):
    start_response(status='200 OK',headers=[('Content-Type','text/html')])
    url = environ['PATH_INFO']  #url取的是访问时端口号后面的地址
    return '谢谢你的访问!'  #可以读取html文件


if __name__ == '__main__':
    httpd = make_server('',8000,RunServer)
    print('Server Http on 8000......')
    httpd.serve_forever()  #循环监听访问,当有访问时,返回RunServer函数的返回值
网站服务器监听代码

 3、服务器网站;且模拟多人访问创建一个连接实例,并且随机取连接线路

#!usr/bin/env python
# -*- coding:utf-8 -*-
class ConnectionPool:
    ins = None
    def __init__(self):
        self.ip = '202.102.154.3'
        self.port = '3306'
        self.username = 'odoo'
        self.password = '123456'
        self.connections = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    def get_connection(self):
        import random
        i = random.randrange(0,10)
        return self.connections[i]
    @staticmethod
    def get_instance():
        if ConnectionPool.ins:
            return ConnectionPool.ins
        else:
            re = ConnectionPool()
            ConnectionPool.ins = re
            return re

from wsgiref.simple_server import make_server

def RunServer(environ,start_response):
    start_response(status='200 OK',headers=[('Content-Type','text/html')])
    url = environ['PATH_INFO']  #url取的是访问时端口号后面的地址
    pool = ConnectionPool.get_instance()
    print(pool)
    cnn = pool.get_connection()
    print(cnn)
    return_text = '谢谢你的访问!%s-%s' %(pool,cnn)
    return return_text  #可以读取html文件


if __name__ == '__main__':
    httpd = make_server('',8000,RunServer)
    print('Server Http on 8000......')
    httpd.serve_forever()  #循环监听访问,当有访问时,返回RunServer函数的返回值
模拟网站多人登陆单实例

 

posted @ 2017-03-12 22:11  I我的博客I  阅读(216)  评论(0编辑  收藏  举报