我在 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 回答
- 0 關注
- 233 瀏覽
添加回答
舉報
0/150
提交
取消