2013-05-16 6 views
5

का कारण बनने वाले एकाधिक थ्रेड और ऑटोरेलोडिंग प्रोग्राम मैं स्थानीय रूप से मल्टीथ्रेड किए गए वेब अनुप्रयोगों को डीबग करने के लिए आईपीडीबी डीबगर का उपयोग कर रहा हूं (Django, Plone)। जब मैं डीबग प्रॉम्प्ट पर होता हूं तो अक्सर आईपीडीबी भ्रमित हो जाता है क्योंकि ऑटोरलोड होता है। जिसके परिणामस्वरूप स्टैक ट्रेस अपआईपीडीबी, प्रोग्रामिंग एरर

/Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in writeout_cache(self, conn) 
     605   with self.db_input_cache_lock: 
     606    try: 
    --> 607     self._writeout_input_cache(conn) 
     608    except sqlite3.IntegrityError: 
     609     self.new_session(conn) 

    /Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in _writeout_input_cache(self, conn) 
     589    for line in self.db_input_cache: 
     590     conn.execute("INSERT INTO history VALUES (?, ?, ?, ?)", 
    --> 591         (self.session_number,)+line) 
     592 
     593  def _writeout_output_cache(self, conn): 

    ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 4546363392 and this is thread id 140735211872640 

इस के बाद आता है, या तो कार्यक्रम बंद नहीं किया जा सकता (धागे फांसी) या खुद ipdb कार्य करना बंद कर।

क्या इस समस्या को ipdb के साथ माइग्रेट करने और इसे अधिक बहु-थ्रेड/ऑटोरेलोड सुरक्षित बनाने का कोई तरीका है?

EDIT: प्रश्न को थोड़ा स्पष्ट करें, क्योंकि मेरा मानना ​​है कि यह आईपीथॉन मुद्दों के अंतर्निहित हो सकता है। आईपीथॉन को रीलोड पर इतिहास छोड़ने या समस्याग्रस्त आईपीथॉन को अक्षम करने के साथ कुछ प्रकार का कामकाज हो सकता है SQLite कुछ अन्य तरीकों से लिखता है।

उत्तर

5

तुम हमेशा एक थ्रेड मोड में Django चला सकते हैं

python manage.py runserver --nothreading 
संबंधित मुद्दे