1

当我收到超过 100 个并发请求时,mysql.connect()会产生“连接太多”错误。我正在使用一个托管数据库,它没有给我一个 root 用户来增加连接限制。以下是我需要更换的临时修复。

import flaskext.mysql

@app.route("/filter")
def filter_ep():

    # FIXME: hot fix for "too many connections" error
    conn = None
    errs = 0
    while not conn and errs < 100:
        try:
            conn = mysql.connect()
        except Exception as e:
            errs += 1
            time.sleep(0.001)

    cur = con.cursor()
    # pull `results` from database
    cur.close()
    conn.close()

    return results

当我尝试使用单个全局连接执行相同的代码时,我收到数据包乱序错误,表明游标正在读取彼此的响应。

我认为正确的解决方案是为查询创建某种任务队列,但不确定如何实现。

4

1 回答 1

0

这是我目前的解决方案,它仍然很糟糕,但至少它不会消耗所有可用的连接,从而导致其他事情中断。

# FIXME: this is still bad
conn = None
errs = 0
# for 1s try to connect until there's an open conn in queue
while not conn and errs < 100:
    try: 
        conn = mysql.connector.connect(pool_name="ropool", pool_size=4, **db.mysql_connection_args)
    except Exception as e:
        errs += 1
        time.sleep(0.01)
if not conn:
    return json.dumps({"errorMessage" : "failed to connect to database"}), 500

于 2019-08-29T18:32:07.873 回答