2012-03-05 19 views
7

मैं अजवाइन में अपने कार्यकर्ता नोड्स (उदाहरण के लिए कैश प्राधिकरण टोकन, आंकड़े, ...) के बीच सूचनाओं के छोटे टुकड़े साझा करना चाहता हूं।एक मशीन पर अजवाइन श्रमिकों के बीच मेमोरी क्षेत्रों को साझा करें

यदि मैं अपने कार्यों के अंदर एक वैश्विक बना देता हूं- फ़ाइल प्रति अद्वितीय कार्यकर्ता है (मेरे कर्मचारी प्रक्रियाएं हैं और 1 कार्य/निष्पादन का जीवनकाल है)।

सबसे अच्छा अभ्यास क्या है? क्या मुझे बाहरी रूप से राज्य को बचाया जाना चाहिए (डीबी), पुरानी शैली वाली साझा मेमोरी बनाएं (अजवाइन में विभिन्न पूल कार्यान्वयन के कारण मुश्किल हो सकती है)?

अग्रिम धन्यवाद!

from multiprocessing import Manager 
manag = Manager() 
serviceLock = manag.Lock() 
serviceStatusDict = manag.dict() 

यह dict हर प्रक्रिया से पहुँचा जा सकता है, यह सिंक्रनाइज़ होती है, लेकिन आप जब यह समवर्ती तक पहुँचने (में की तरह एक लॉक का उपयोग करने के लिए है: कोर अजगर बहु-प्रबंधक -

+1

रेडिस जैसे memcached, या कुंजी-मूल्य स्टोर जैसे कैश के बारे में क्या? – demalexx

+0

यह एक तरीका होगा, लेकिन मुझे उम्मीद थी कि मैं अतिरिक्त निर्भरता के बिना एक रास्ता खोज सकता हूं। – Gregor

+0

यह छोटी निर्भरता है लेकिन यह कुछ समस्याओं को हल करेगा जो आप स्वयं इंटर संचार संचार को लागू कर सकते हैं। – demalexx

उत्तर

7

मैं अंत में एक सभ्य समाधान नहीं मिला हर दूसरे साझा स्मृति कार्यान्वयन)।

+0

हाय ग्रेगोर, मुझे इस मुद्दे पर आपकी राय रखने में खुशी होगी: http://stackoverflow.com/questions/26088868/asynchronous-task-queue-processing-of-in-memory-data- stucture-in-django क्या आपको लगता है कि आपका समाधान मेरी समस्या के लिए उपयुक्त होगा? बहुत बहुत धन्यवाद – cyberjoac

+0

हाय साइबरजोक, आम तौर पर यह काम कर सकता है, लेकिन यदि आप Django और Celery उसी प्रक्रिया समूह (जो मुझे संदेह है) में रहते हैं तो आपको यह देखने की ज़रूरत है। अगर यह काम करता है तो मुझे बताएं, मुझे रूचि है! – Gregor

+1

आप इस प्रबंधक को कहां रखते हैं? –