【问题标题】:python flask mysql using only one connectionpython flask mysql 只使用一个连接
【发布时间】:2019-08-27 18:59:48
【问题描述】:

当我收到超过 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

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

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

【问题讨论】:

  • 我把标题说成“只有一个连接”,但实际上我最多可以达到 20 个,理想情况下我会使用并行连接的解决方案

标签: python mysql python-3.x multithreading flask


【解决方案1】:

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

# 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-05-10
    • 2020-04-06
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2023-03-07
    • 2018-06-13
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多