zoukankan      html  css  js  c++  java
  • python各种单例模式

    单例模式的目的是:

    让程序一直保持一个连接,发送数据,不要一直建立新连接 和 销毁旧连接。

    socket的单例模式:

    import socket
    from conf.settings import selenium_sk_ip, selenium_sk_port
    
    
    class ConnectSelenium(object):
    
        __flag = None
    
        # 单例模式
        def __new__(cls, *args, **kwargs):
            if not cls.__flag:
                cls.__flag = super().__new__(cls)
            return cls.__flag
    
        def __init__(self, flag=False):
            if 'sk' not in self.__dict__ or flag:
                sk = socket.socket()
                sk.connect((selenium_sk_ip, int(selenium_sk_port)))
                self.sk = sk
    
        def get_sk(self):
            return self.sk
    
    
    if __name__ == '__main__':
        ip = '127.0.0.1'
        port = 9001
        obj1 = ConnectSelenium()
        obj2 = ConnectSelenium()
        obj3 = ConnectSelenium()
        sk = obj2.get_sk()
        print(sk)
        # sk.send(b'123')
        # sk.send(b'456')
        sk.close()

    mysql的单例模式:

    import pymysql
    from conf.settings import (mysql_host, mysql_port, mysql_user, mysql_pwd, connect_to_db, db_charset)
    
    
    class ConnectMysql(object):
    
        __flag = None
    
        # 单例模式
        def __new__(cls, *args, **kwargs):
            if not cls.__flag:
                cls.__flag = super().__new__(cls)
            return cls.__flag
    
        def __init__(self):
            if 'cursor' not in self.__dict__:
                # print('实例')
                mysql_conn = pymysql.connect(host=mysql_host, user=mysql_user, passwd=mysql_pwd, port=mysql_port, db=connect_to_db, charset=db_charset)
                # 指定参数表示返回字典结果的数据
                cursor = mysql_conn.cursor(cursor=pymysql.cursors.DictCursor)
                self.mysql_conn = mysql_conn
                self.cursor = cursor
    
        def get_cursor(self):
            return self.cursor
    
        def commit_data(self):
            self.mysql_conn.commit()
    
    
    if __name__ == '__main__':
        obj1 = ConnectMysql()
        obj2 = ConnectMysql()
        cursor = obj1.get_cursor()

    redis的单例模式:

    from redis import Redis
    from conf.settings import (
        redis_host,
        redis_port,
        redis_db,
        redis_password
    )
    
    
    class ConnectRedis(object):
    
        __flag = None
    
        # 单例模式
        def __new__(cls, *args, **kwargs):
            if not cls.__flag:
                cls.__flag = super().__new__(cls)
            return cls.__flag
    
        def __init__(self):
            if 'cursor' not in self.__dict__:
                redis_conn = Redis(host=redis_host, port=redis_port, db=redis_db, password=redis_password)
                self.cursor = redis_conn
    
        def get_cursor(self):
            return self.cursor
    
    
    if __name__ == '__main__':
        obj1 = ConnectRedis()
        obj2 = ConnectRedis()
        cursor = obj1.get_cursor()
        print(obj1)
        print(obj2)

    日志的单例模式:

    import logging
    
    
    log_path = r'D:log	.txt'
    
    
    # 单例模式
    class Log(object):
    
        __flag = None
    
        def __new__(cls, *args, **kwargs):
            if not cls.__flag:
                cls.__flag = super().__new__(cls)
            return cls.__flag
    
        def __init__(self):
            if 'logger' not in self.__dict__:
                logger = logging.getLogger()
                logger.setLevel(level=logging.DEBUG)
                filehandle = logging.FileHandler(log_path,encoding='utf-8')
                streamhandle = logging.StreamHandler()
                logger.addHandler(filehandle)
                logger.addHandler(streamhandle)
                format = logging.Formatter('%(asctime)s:%(levelname)s:%(lineno)s %(message)s')
                filehandle.setFormatter(format)
                streamhandle.setFormatter(format)
    
                self.logger = logger
    
        def return_logger(self):
            return self.logger
    
    def get_logger():
        return Log().return_logger()
    
    if __name__ == '__main__':
        logger = get_logger()
        logger.debug('zezhou')
  • 相关阅读:
    VS2012 professional和VS2012 Ultimate的区别
    ConcurrentDictionary和Dictionary
    ConcurrentDictionary的ToDictionary
    AutoResetEvent
    查看局域网内某个ip的mac地址
    斗争程序猿(三十八)——历史朝代大学(两)——我与数据库的故事
    Windowsport80解决方案被占用
    unity3d 各功能的运行秩序,打回来,订购,的次数
    蜘蛛爱上你的网站
    Java线(一个):线程安全的和不安全
  • 原文地址:https://www.cnblogs.com/zezhou/p/12439039.html
Copyright © 2011-2022 走看看