普通网友 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 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿