2011-01-13 14 views
8

मैं SQLAlchemy का उपयोग अपने डेटाबेस बैकएंड से कनेक्ट और मेरे अजगर आवेदन में बहु का भारी इस्तेमाल करते हैं। मैं एक ऐसी स्थिति में आया जिसके लिए एक ऑब्जेक्ट संदर्भ पारित करने की आवश्यकता होती है, जो डेटाबेस प्रक्रिया का परिणाम है, एक प्रक्रिया से दूसरे तक। क्योंकि वस्तु एक अन्य सत्र में जुड़ा हुआ हैSQLAlchemy और बहु ​​

यह एक समस्या है क्योंकि जब वस्तु की एक विशेषता तक पहुँचने, SQLAlchemy अन्य प्रक्रिया है, जो एक अपवाद के साथ विफल रहता है के वर्तमान सत्र में वस्तु पुनः अनुलग्न trys, है:

InvalidRequestError: Object '<Field at 0x9af3e4c>' is already attached to session '148848780' (this is '159831148') 

इस स्थिति को संभालने का तरीका क्या है? क्या ऑब्जेक्ट को पहले सत्र से अलग करना या ओआरएम से संबंधित सामान के बिना ऑब्जेक्ट क्लोन करना संभव है?

+2

बस एक सुझाव:

मैं गुण आप उस वस्तु से बाहर की जरूरत है लेने, उन्हें एक dict में जाम का सुझाव और multprocessing पाइपों का उपयोग कर प्रक्रियाओं पार भेजने की है आप में वस्तु विलय की कोशिश की नया सत्र? http://www.sqlalchemy.org/docs/orm/session.html#merging –

+0

session.expunge (obj) बनाता है SQLAlchemy obj के बारे में भूल जाते हैं। हालांकि, अगर आप बाद में ओबीजी बदलते हैं, तो डेटाबेस में परिवर्तन अब और नहीं किए जाते हैं। maksymko का सुझाव निश्चित रूप से बेहतर है। – Simon

+0

वस्तु एक और डेटाबेस संग्रहीत वस्तु पर विशेषता है? उदाहरण के लिए यह एक विदेशी कुंजी या एक ब्लॉब है? –

उत्तर

13

यह एक बुरा विचार (टीएम) है।

आप (मैं जानता हूँ कि यह लुभावना है), क्योंकि बुरी बातों के सभी प्रकार के बाद से ताला पुरातन कई अजगर runtimes में काम करने का इरादा नहीं है हो सकता है इस तरह प्रक्रियाओं के बीच स्टेटफुल वस्तु का हिस्सा नहीं होना चाहिए।

http://docs.python.org/library/multiprocessing.html#pipes-and-queues

+0

मैं केवल इन वस्तुओं पर पढ़ने की जरूरत है। क्या आपको लगता है कि अन्य प्रक्रियाओं की वस्तुओं से भी पढ़ना गन्दा है? –

+0

हां, क्योंकि आप 100% सुनिश्चित नहीं हो सकते हैं कि ऑब्जेक्ट व्यवहार –

+0

उचित लगता है। धन्यवाद! –