亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 233 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號