相关疑难解决方法(0)

python中数据库连接池的最佳解决方案是什么?

我已经开发了一些类似于DAO的自定义类来满足我的项目的一些非常专业的需求,这是一个服务器端进程,它不在任何类型的框架内运行.

解决方案很有效,除了每次发出新请求时,我都会通过MySQLdb.connect打开一个新连接.

什么是最好的"drop in"解决方案,将其转换为在python中使用连接池?我正在想象类似于Java的公共DBCP解决方案.

这个过程是长时间运行的,并且有很多线程需要发出请求,但不是所有的同时...特别是他们在写出一大块结果的短暂爆发之前做了很多工作.

编辑添加:经过一些搜索,我发现anitpool.py看起来不错,但由于我对python相对较新,我想我只是想确保我没有错过更明显/更惯用/更好的解决方案.

python mysql connection-pooling

32
推荐指数
4
解决办法
5万
查看次数

从Python多处理访问MySQL连接池

我正在尝试建立一个MySQL连接池,让我的工作进程访问已经建立的池,而不是每次都建立一个新的连接.

如果我应该将数据库光标传递给每个进程,或者是否有其他方法可以做到这一点,我很困惑?MySql.connector不应该自动进行池化吗?当我检查我的日志文件时,会打开和关闭许多连接...每个进程一个.

我的代码看起来像这样:

PATH = "/tmp"

class DB(object):
  def __init__(self):
    connected = False
    while not connected:
      try:
        cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "pool1",
                                                          **config.dbconfig)
        self.__cnx = cnxpool.get_connection()
      except mysql.connector.errors.PoolError:
        print("Sleeping.. (Pool Error)")
        sleep(5)
      except mysql.connector.errors.DatabaseError:
        print("Sleeping.. (Database Error)")
        sleep(5)

    self.__cur = self.__cnx.cursor(cursor_class=MySQLCursorDict)

  def execute(self, query):
    return self.__cur.execute(query)

def isValidFile(self, name):
  return True

def readfile(self, fname):
  d = DB()
  d.execute("""INSERT INTO users (first_name) VALUES ('michael')""")

def main():
  queue = multiprocessing.Queue()
  pool = multiprocessing.Pool(None, init, [queue])
  for dirpath, dirnames, filenames in os.walk(PATH):

    full_path_fnames …
Run Code Online (Sandbox Code Playgroud)

python connection-pooling mysql-python

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

connection-pooling ×2

python ×2

mysql ×1

mysql-python ×1