Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gunicorn多线程与MySQL_Mysql_Django_Multithreading_Gunicorn_Eventlet - Fatal编程技术网

Gunicorn多线程与MySQL

Gunicorn多线程与MySQL,mysql,django,multithreading,gunicorn,eventlet,Mysql,Django,Multithreading,Gunicorn,Eventlet,我正在尝试运行一个简单的NGnix+Gunicorn+Django+MySQL(AWS上的RDS)堆栈,但是很明显,一些MySQL查询发生的任何事情都会减慢速度并锁定服务 为了防止这种情况发生,我开始使用eventlet(它也能很好地处理芹菜),但修补MySQLdb似乎会导致性能损失(2-3倍的响应时间)和不稳定(可能会在重启期间将所有数据库连接锁定几秒钟) 芹菜+eventlet与同样的逻辑似乎工作得很好,那么我错过了什么 try: import eventlet worke

我正在尝试运行一个简单的NGnix+Gunicorn+Django+MySQL(AWS上的RDS)堆栈,但是很明显,一些MySQL查询发生的任何事情都会减慢速度并锁定服务

为了防止这种情况发生,我开始使用eventlet(它也能很好地处理芹菜),但修补MySQLdb似乎会导致性能损失(2-3倍的响应时间)和不稳定(可能会在重启期间将所有数据库连接锁定几秒钟)

芹菜+eventlet与同样的逻辑似乎工作得很好,那么我错过了什么

try:
    import eventlet

    worker_class = 'egg:gunicorn#eventlet'
    worker_connections = 1000
    def do_post_fork(server, worker):
        eventlet.monkey_patch()
        eventlet.monkey_patch(MySQLdb=True)

    post_fork = do_post_fork
except ImportError as e:
    import logging
    logging.exception(e)
    pass

谢谢

慢速查询不应减慢整个服务的速度。只应提交一个特定请求。其他工人能够满足其他要求

您可以尝试使用大量的单线程gunicorn Worker。它们会消耗大量内存,但这是最健壮的解决方案

我不是AWS专家,所以下面是一个猜测

不幸的是,mysqldb是C扩展,所以并没有办法“正确”修补它。相反,eventlet使用线程池使mysqldb绿色线程友好


Python3.3之前的线程毫无理由地浪费大量CPU资源。因此,性能问题可能是由于greenlet、Python线程和AWS虚拟化的兼容性差造成的。同样,我不知道确切的原因,这只是猜测。

同意。因此,我认为问题不在于“使用了更多的资源”,而是另一个未修补的资源阻塞线程。现在我禁用了补丁,直到我找到了导致它的原因