• djangomysql的连接池


    http://pypi.python.org/pypi/django-mysqlpool/0.1-7
    一个 SmartFile 的开源项目

    介绍

    这是一个简单的mysql连接池的数据库后端。这个后端实现源于Ed Menendez的一个博客文章:
    http://menendez.com/blog/mysql-connection-pooling-django-and-sqlalchemy/
    和博客有两个不同:
    1.工作已经替你完成。
    2.我们不是复制出django的mysql后端,我们只是monkey-patch(不修改源码的基础上扩展)它。

    第二种看起来不好,但是它不依赖指定的版本中,用这个方法让我们将受益django的bug修改,这只是一个连接池层(一个单独进程)。

    这个pooling使用SQLAlchemy。它不完美但非常有用(这个后端是一个单独的进程)它主要解决的问题是为一个进程提供限定的连接。

    用法

    用下面的配置取代默认的后端配置。

    DATABASES = {
        'default': {
            'ENGINE': 'django_mysqlpool.backends.mysqlpool',
            'NAME': 'db_name',
            'USER': 'username',
            'PASSWORD': 'password',
            'HOST': '',
            'PORT': '',
        },
    }

    配置

    你可以定义池的执行和特定的参数。参数的定义自己看SQLAlchemy的文档

            MYSQLPOOL_BACKEND - pool 实现的名字 (默认'QueuePool').
            MYSQLPOOL_ARGUMENTS - 给 pool传递的参数

    这个例子,使用不适用本地线程的QueuePool ,你可以使用下面的配置:

    MYSQLPOOL_BACKEND = 'QueuePool'
    MYSQLPOOL_ARGUMENTS = {
        'use_threadlocal': False,
    }

    关闭连接


    这里和直接关闭连接池不会直接操作。在你开始连接池后,关闭就显得很重要了。

    当你处理一个线程应用的时候就产生了依赖。就像一台服务器,它创建和你多线程处理当前操作。每个线程都保持数据库连接,一旦我们开始连接池,这个服务器会很快的用尽连接池数目限制。

    这个看起来是一个失败,但是它很成功。我们实现指定每个进程一个确切的连接数量。这个防止任何进程影响别的服务,将全局问题限制到本地问题。当我们发现有一个服务滥用mysql服务,我们就要修复它。

    这个线程服务器的问题详细描述如下:
    http://stackoverflow.com/questions/1303654/threaded-django-task-doesnt-automatically-handle-transactions-or-db-connections

    因此,这个库提供了一个帮助管理的形式:

    from django_mysqlpool import auto_close_db
    
    @auto_close_db
    def function_that_uses_db():
        MyModel.objects.all().delete()

       
    对于pooling,关闭连接及早和多次是一个好性能的关键,关闭的连接是可重用的。这样连接总数会下降。我们一般在QueuePool模式下需要use_threadlocal 。让线程共享相同的连接。一旦我们共享连接,服务使用比线程数少的连接。

  • 相关阅读:
    java线程实现和集合类综合问题
    软件体系结构风格总结
    java如何实现对象的克隆
    24小时实现盲打(程序员快速入门)
    测试面向对象软件时,设计集成测试用例的方法
    对白盒测试的一些理解
    对于工程建模需要画的图的分析及体会
    在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
    谭静第一周任务
    陈林艳第一周任务
  • 原文地址:https://www.cnblogs.com/wanself/p/2822184.html
Copyright © 2020-2023  润新知