普通网友 2017-12-10 14:27 采纳率: 0%
浏览 1575

python MySQLdb 连接数据库太耗时

图片说明

 #!usr/bin/python
#!coding:utf-8

import MySQLdb
import threading
from config.config import Config
from Clogger.logger import CLogger
import time


class Positions(object):
    __instance = None
    __positions = None
    __index = 0
    __Lock = None
    __size = 0

    def __init__(self):
        pass


    def __del__(self):
        Positions.__instance = None
        Positions.__positions = None
        Positions.__index = 0
        Positions.__Lock = None
        Positions.__size = 0


    def __new__(cls, *args, **kwargs):
        Positions.__Lock = threading.Lock()
        if not cls.__instance:
            try:
                Positions.__Lock.acquire()
                if not cls.__instance:
                    cls.__instance = super(Positions, cls).__new__(cls, *args, **kwargs)
                    cls.__instance.selectAll()
            finally:
                Positions.__Lock.release()


    def selectAll(self):
        try:
            print time.time()
            conn = MySQLdb.connect(
                host=Config.mysql_host,
                port=Config.mysql_port,
                user=Config.mysql_user,
                passwd=Config.mysql_password,
                db=Config.mysql_db,
                charset="utf8"
            )
            print time.time()
            cursor = conn.cursor()
        except Exception, e:
            CLogger.logger().error(str(e))
            exit()
        sql1 = "select towncode from addressComponents where province='%s' and city = '%s' and towncode is not null " \
               "group by towncode" % (Config.current_province, Config.current_city)
        sql = "select lng, lat from pois where towncode in (%s);" % sql1
        cursor.execute(sql)
        Positions.__positions = cursor.fetchall()
        Positions.__size = len(Positions.__positions)
        print Positions.__size
        if Positions.__size <= 0:
            CLogger.logger().info(str(Positions.__size))
            exit(-1)


    @staticmethod
    def getPosition():
        if not Positions.__instance:
            Positions.__new__()
        try:
            Positions.__Lock.acquire()
            index = Positions.__index
            Positions.__index += 1
            Positions.__Lock.release()
            if index >= Positions.__size:
                return "Empty"
            return Positions.__positions[index]
        except Exception, e:
            CLogger.logger().error(str(e))

  • 写回答

3条回答 默认 最新

  • devmiao 2017-12-10 15:57
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试