Gunicorn多线程与MySQL
我正在尝试运行一个简单的NGnix+Gunicorn+Django+MySQL(AWS上的RDS)堆栈,但是很明显,一些MySQL查询发生的任何事情都会减慢速度并锁定服务 为了防止这种情况发生,我开始使用eventlet(它也能很好地处理芹菜),但修补MySQLdb似乎会导致性能损失(2-3倍的响应时间)和不稳定(可能会在重启期间将所有数据库连接锁定几秒钟) 芹菜+eventlet与同样的逻辑似乎工作得很好,那么我错过了什么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
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虚拟化的兼容性差造成的。同样,我不知道确切的原因,这只是猜测。同意。因此,我认为问题不在于“使用了更多的资源”,而是另一个未修补的资源阻塞线程。现在我禁用了补丁,直到我找到了导致它的原因