2014-12-02 6 views
13

मेरे पास एक बड़ी पठन-केवल डेटा संरचना है (नेटवर्क में लोड किया गया ग्राफ, हालांकि यह महत्वपूर्ण नहीं होना चाहिए) कि मैं अपनी वेब सेवा में उपयोग करता हूं। Webservice फ्लास्क में बनाया गया है और फिर Gunicorn के माध्यम से सेवा की। यह पता चला है कि हर बंदूकधारी कार्यकर्ता के लिए मैं स्पिन करता हूं, जिसने काम किया है, मेरी डेटा-संरचना की अपनी प्रतिलिपि रखती है। इस प्रकार, मेरे ~ 700 एमबी डेटा स्ट्रक्चर जो एक कार्यकर्ता के साथ पूरी तरह से प्रबंधनीय है, जब उनमें से 8 चल रहे हैं तो एक बहुत बड़ी मेमोरी होग में बदल जाता है। क्या कोई तरीका है कि मैं इस डेटा संरचना को बंदूक प्रक्रियाओं के बीच साझा कर सकता हूं, इसलिए मुझे इतनी मेमोरी बर्बाद नहीं करनी है?गनिकोर्न में मेमोरी साझा करना?

+0

क्या आपने डेटा स्टोर करने और प्रत्येक प्रक्रिया से इसे एक्सेस करने के लिए रेडिस जैसे कुछ का उपयोग करने पर विचार किया है? जहां तक ​​गति चलती है, साझा स्मृति के समान ही होगा। – nathancahill

+0

मैं चाहता हूं, लेकिन हम एक जटिल ग्राफ के बारे में बात कर रहे हैं कि रेडिस में स्टोर करने का कोई आसान तरीका नहीं है (रेडिस के पास कोई निर्देशित किनारे ग्राफ या वर्तमान में AFAIK सामान्य ग्राफ समर्थन नहीं है)। – Eli

+1

क्या समाधान आपके लिए काम करता है? यदि हाँ, क्या आप मुझे विस्तार से जान सकते हैं, आपने यह कैसे किया? – neel

उत्तर

6

यह preload_app विकल्प का उपयोग करके tell gunicorn to preload your application पर ऐसा करने का सबसे आसान तरीका है। यह मानता है कि आप एक मॉड्यूल-स्तर चर के रूप में डेटा संरचना लोड कर सकते हैं:

from flask import Flask 
from your.application import CustomDataStructure 

CUSTOM_DATA_STRUCTURE = CustomDataStructure('/data/lives/here') 

# @app.routes, etc. 

वैकल्पिक रूप से, आप एक memory-mapped file (आप अपने कस्टम डेटा संरचना के साथ साझा स्मृति लपेट कर सकते हैं अगर), gevent with gunicorn सुनिश्चित करें कि आप इस्तेमाल कर सकते हैं केवल एक प्रक्रिया, या the multi-processing module to spin up your own data-structure server का उपयोग कर रहे हैं जो आप आईपीसी का उपयोग करने के लिए कनेक्ट करते हैं।

+0

प्रीलोड विकल्प काम नहीं कर रहा है, क्या आप कुछ डमी डेटा संरचना के साथ इसका उपयोग करने के बारे में कुछ उदाहरण प्रदान कर सकते हैं? – neel

+0

@neel - आप शायद अपने सेटअप के उदाहरण और क्या काम नहीं कर रहे हैं, के साथ एक और प्रश्न पूछने से बेहतर हो। –

+0

मैंने यहां प्रश्न पोस्ट किया है http://stackoverflow.com/questions/35914587/how-to-get-a-concurreny-of-1000-requests-with-flask-and-gunicorn यदि आप दिखते हैं तो यह बहुत अच्छा होगा एक बार में। अग्रिम में धन्यवाद। – neel

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