2015-06-25 11 views
7

मैं वर्तमान में Flask-uWSGI-Websockets का उपयोग कर रहा हूं ताकि मेरे आवेदन के लिए वेबस्केट कार्यक्षमता प्रदान की जा सके। मैं अपने MySQL डेटाबेस से कनेक्ट करने के लिए फ्लास्क-स्क्लाक्लेमी का उपयोग करता हूं।फ्लास्क-स्क्लाक्लेमी और गेवेन्ट mysql कनेक्शन बंद नहीं कर रहे हैं

फ्लास्क-यूडब्ल्यूएसजीआई-वेबसाइटॉक वेबसाइकिल कनेक्शन प्रबंधित करने के लिए भूगर्भ का उपयोग करता है।

समस्या जो मैं वर्तमान में कर रहा हूं वह यह है कि जब एक वेबसाइकिल कनेक्शन समाप्त हो जाता है, तो फ्लास्क-स्क्लाक्लेमी द्वारा स्थापित डेटाबेस कनेक्शन जीवित रहेगा।

मैंने प्रत्येक वेबसाइकिल कनेक्शन के बाद db.session.close() और db.engine.dispose() पर कॉल करने का प्रयास किया है, लेकिन इसका कोई प्रभाव नहीं पड़ा।

मेरे ऐप की शुरुआत में gevent.monkey.patch_all() पर कॉल करने से कोई फर्क नहीं पड़ता है।

from gevent.monkey import patch_all 
patch_all() 

from flask import Flask 
from flask_uwsgi_websocket import GeventWebSocket 
from flask_sqlalchemy import SQLAlchemy 

app = Flask() 
ws = GeventWebSocket() 
db = SQLAlchemy() 

db.init_app(app) 
ws.init_app(app) 


@ws.route('/ws') 
def websocket(client): 
    """ handle messages """ 
    while client.connected is True: 
     msg = client.recv() 
     # do some db stuff with the message 

    # The following part is executed when the connection is broken, 
    # i tried this for removing the connection, but the actual 
    # connection will stay open (i can see this on the mysql server). 
    db.session.close() 
    db.engine.dispose() 
+1

पर क्या आप वाकई रहे सत्र समापन कोड तक पहुँच जाता है? क्या यह हो सकता है कि इसके बजाय एक अपवाद उठाया जा रहा है? इस तरह के मामले में मैं 'समापन' कथन के शरीर में सत्र समापन कोड डालूंगा – architectonic

उत्तर

0

मैं एक ही स्थिति है:

मैं क्या कर रहा हूँ का एक सरल प्रतिनिधित्व यह है। और mysql विन्यास फाइल my.cnf में स्थित मेरे लिए समाधान:

[mysqld] 
interactive_timeout=180 
wait_timeout=180 

आप के बाद my.cnf बचाने mysql सेवा पुनरारंभ करना होगा।

अगर आप mysql सेवा पुन: प्रारंभ नहीं करना चाहती आप एसक्यूएल प्रश्नों का उपयोग कर सकते हैं:

SET GLOBAL interactive_timeout = 180; 
SET GLOBAL wait_timeout = 180; 

भी देखें wait_timeout और interactive_timeout mysql.com

संबंधित मुद्दे