为了账号安全,请及时绑定邮箱和手机立即绑定

cx_Oracle SessionPool 所有 Flask 问题的根源

cx_Oracle SessionPool 所有 Flask 问题的根源

PHP
喵喔喔 2023-11-09 21:16:38
我在 Flask 中通过 uwsgi 创建了一个 Web 服务。为了安全起见,我想我应该遵循良好的实践并创建一个具有 20 个连接的 SessionPool。每次调用 Web 服务端点时,我都会从池中获取一个连接,最后释放它。当使用 Locust 进行群体测试 API 时,我遇到了数百次失败,在一些较长的响应(30Mb JSON 响应)上几乎 100% 失败。较小的有效载荷要好得多,但会出现间歇性故障。当我切换回不良实践并在方法本身内创建一个新的连接和光标时,我所有的问题都消失了。数千次压力测试呼叫 100% 成功。我的错误多种多样。TNS 错误数据包、池中连接数不正确、用户取消请求......只要你能想到的,它就在那里。因此,我似乎无法将 Oracle 连接池与 Flask 一起使用,或者在 Flask 应用程序级别上只有一个连接(这会生成错误,不知道为什么,这就是我切换到连接池的原因)。有关在 Flask 中使用 cx_Oracle 创建可扩展应用程序的任何建议。我原来的代码是:pool = cx_Oracle.SessionPool("user", "password", "myserver.company.net:1521/myservice", min=10, max=10, increment=0, getmode=cx_Oracle.SPOOL_ATTRVAL_WAIT, encoding="UTF-8")def read_products_search(search=None):    """    This function responds to a request for /api/products    with the complete lists of people    :return:        json string of list of people    """    conn_ariel = pool.acquire()       cursor_ariel = conn_ariel.cursor()    search=search.lower()    print("product search term is: ", search)    # Create the list of products from our data    sql = """        SELECT DRUG_PRODUCT_ID, PREFERRED_TRADE_NAME, PRODUCT_LINE, PRODUCT_TYPE, FLAG_PASSIVE, PRODUCT_NUMBER        FROM DIM_DRUG_PRODUCT         WHERE lower(PREFERRED_TRADE_NAME) LIKE '%' || :search1 || '%' or lower(PRODUCT_LINE) LIKE '%' || :search2 || '%'  or lower(PRODUCT_NUMBER) LIKE '%' || :search3 || '%'         ORDER BY PREFERRED_TRADE_NAME ASC        """    cursor_ariel.execute(sql, {"search1":search,"search2":search, "search3":search })    products = []    for row in cursor_ariel.fetchall():        r = reg(cursor_ariel, row, False)        product = {            "drug_product_id"           :   r.DRUG_PRODUCT_ID,            "preferred_trade_name"      :   r.PREFERRED_TRADE_NAME,            "product_line"              :   r.PRODUCT_LINE,            "product_type"              :   r.PRODUCT_TYPE,            "flag_passive"              :   r.FLAG_PASSIVE,            "product_number"            :   r.PRODUCT_NUMBER        }
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

创建池时,使用threaded=True.

查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信