2013-06-27 7 views
5

का उपयोग कर डेटा साझा करना मैंने पायथन में आईपीसी के लिए एक कुशल समाधान की खोज करते समय ज़ीरोम पर ठोकर खाई; मेरे पास कुछ पाइथन प्रक्रियाएं हैं जिन्हें मास्टर प्रक्रिया में एक नियम से डेटा पर कुछ सीपीयू गहन प्रसंस्करण करने की आवश्यकता है। ये कार्यकर्ता केवल ताना से पढ़ते हैं, केवल मास्टर प्रक्रिया ही नियम को बदल सकती है। ताना में डेटा बदल जाएगा, लेकिन परमाणु रूप से मास्टर प्रक्रिया के माध्यम से।pyzmq शून्य-प्रति

मैं आदर्श रूप से साझा स्मृति का एक टुकड़ा रखता हूं जहां सभी कार्यकर्ता प्रक्रियाएं स्कूल को पढ़ सकती हैं, दुर्भाग्यवश यह पाइथन में संभव नहीं लगती है।

redis या मेम्कैश की तरह एक संचय का उपयोग करने overkill की तरह लगता है तो एक विकल्प के रूप में मैं चाहता हूँ (न सिर्फ कुछ मैं पहले से ही देशी प्रारूप में स्मृति में कहीं साझा करने के लिए उपयोग करने के लिए टीसीपी & अचार बनाने चाहते हैं) ..

एक ज़ीरोमक आईपीसी सॉकेट का उपयोग कर श्रमिकों की सदस्यता लेने के लिए मास्टर dict से प्रासंगिक डेटा को धक्का देने के लिए ज़ीरोमक का उपयोग करने के लिए। इसका मतलब यह होगा कि मैं (दुर्भाग्य से) मास्टर मास्टर से प्रासंगिक भाग को क्रमबद्ध करना होगा (msgpack का उपयोग कर?) और फिर इसे zmq संदेश का उपयोग करके दबाएं। मैंने पढ़ा है कि यह शून्य-प्रतिलिपि का उपयोग करके ऐसा करना संभव है ताकि मैं डेटा को दो बार कॉपी न कर सकूं, क्या यह कुछ ऐसा होता है जो स्वचालित रूप से होता है यदि मैं अपनी msgpacked बाइनरी स्ट्रिंग पर कॉपी = गलत का उपयोग करता हूं? और क्या यह मेरी समस्या के लिए जाने का तरीका है या क्या आप लोगों के पास युक्तियाँ हैं कि इसे और अधिक कुशलता से कैसे निपटें?

धन्यवाद!

Martijn

उत्तर

3

हाँ, यदि आप copy=False के साथ अपने msgpacked बाइट्स भेजने के लिए, वहाँ में स्मृति भेजने की प्रक्रिया के लिए डेटा का कोई अतिरिक्त प्रतियां (समान copy=False के साथ कंधे प्राप्त करने के लिए चला जाता है) हो जाएगा।

प्रदर्शन परीक्षण करना सुनिश्चित करें, क्योंकि अधिक जटिल शून्य-प्रतिलिपि मशीनरी की लागत अक्सर प्रतिलिपि की लागत से अधिक होती है जब तक कि संदेश काफी बड़े नहीं होते हैं (प्रति संदेश केबी के लगभग 10 के आसपास क्रॉसओवर)।

एक वैकल्पिक दृष्टिकोण यह है कि आप केवल बिल्टिन मल्टीप्रोसेसिंग मॉड्यूल के facilities for shared data का उपयोग कर सकते हैं। यह सबसे भयानक नहीं है, लेकिन काफी सरल चीजों के लिए यह काम पूरा कर सकता है।

+0

जानकारी के लिए धन्यवाद, शायद दोनों संदेश होंगे> 10 केबी और <10 केबी इसलिए मुझे निश्चित रूप से कुछ बेंचमार्किंग करना होगा .. क्या कोई सहमति है कि पाइथन प्रक्रियाओं के बीच आईपीसी करने का सबसे प्रभावी तरीका क्या है ? बस मल्टीप्रोसेसिंग पैकेज का उपयोग करें और एक पाइप का उपयोग करें? – Martijnh

+0

आईपीसी करने के कई तरीके हैं, और वर्कलोड के आधार पर विभिन्न उपकरणों के अलग-अलग फायदे हैं। मुझे नहीं लगता कि वहां बहुत आम सहमति है, लेकिन ज़ीरोएमक अपेक्षाकृत लोकप्रिय है। – minrk

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