मेरे पास एक बड़ी पठन-केवल डेटा संरचना है (नेटवर्क में लोड किया गया ग्राफ, हालांकि यह महत्वपूर्ण नहीं होना चाहिए) कि मैं अपनी वेब सेवा में उपयोग करता हूं। Webservice फ्लास्क में बनाया गया है और फिर Gunicorn के माध्यम से सेवा की। यह पता चला है कि हर बंदूकधारी कार्यकर्ता के लिए मैं स्पिन करता हूं, जिसने काम किया है, मेरी डेटा-संरचना की अपनी प्रतिलिपि रखती है। इस प्रकार, मेरे ~ 700 एमबी डेटा स्ट्रक्चर जो एक कार्यकर्ता के साथ पूरी तरह से प्रबंधनीय है, जब उनमें से 8 चल रहे हैं तो एक बहुत बड़ी मेमोरी होग में बदल जाता है। क्या कोई तरीका है कि मैं इस डेटा संरचना को बंदूक प्रक्रियाओं के बीच साझा कर सकता हूं, इसलिए मुझे इतनी मेमोरी बर्बाद नहीं करनी है?गनिकोर्न में मेमोरी साझा करना?
उत्तर
यह 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 का उपयोग कर रहे हैं जो आप आईपीसी का उपयोग करने के लिए कनेक्ट करते हैं।
प्रीलोड विकल्प काम नहीं कर रहा है, क्या आप कुछ डमी डेटा संरचना के साथ इसका उपयोग करने के बारे में कुछ उदाहरण प्रदान कर सकते हैं? – neel
@neel - आप शायद अपने सेटअप के उदाहरण और क्या काम नहीं कर रहे हैं, के साथ एक और प्रश्न पूछने से बेहतर हो। –
मैंने यहां प्रश्न पोस्ट किया है http://stackoverflow.com/questions/35914587/how-to-get-a-concurreny-of-1000-requests-with-flask-and-gunicorn यदि आप दिखते हैं तो यह बहुत अच्छा होगा एक बार में। अग्रिम में धन्यवाद। – neel
- 1. गनिकोर्न
- 2. साझा मेमोरी का उपयोग कब करें जब साझा मेमोरी
- 3. साझा लाइब्रेरी मेमोरी स्पेस
- 4. साझा मेमोरी सेगमेंट
- 5. आयोनिक एंड्रॉयड आंतरिक साझा मेमोरी
- 6. सुपरवाइजर गनिकोर्न + फ्लास्क
- 7. activerecord इन-मेमोरी साझा कैश
- 8. गनिकोर्न और एपैच
- 9. valgrind - साझा लाइब्रेरी में मेमोरी लीक पाएं
- 10. कैसे गनिकोर्न आगे
- 11. Cuda साझा मेमोरी सरणी चर
- 12. एक साझा मेमोरी होने के लिए एक कतार डिजाइन करना
- 13. फोर्क के साथ साझा मेमोरी का उपयोग करना()
- 14. सी ++: ओपनएमपी साझा मेमोरी सुरक्षा
- 15. बूस्ट, साझा मेमोरी और वेक्टर
- 16. जावा और सी ++ साझा मेमोरी
- 17. परीक्षणों में ऑटोफिक्चर साझा करना
- 18. बूस्ट :: Interprocess साझा मेमोरी बस त्रुटि
- 19. क्या स्थानीय मेमोरी CUDA में साझा स्मृति से धीमी है?
- 20. बूस्ट :: एएसओ, साझा मेमोरी और इंटरप्रोसेस संचार
- 21. क्या जेडीबीसी ड्राइवर को साझा मेमोरी प्रोटोकॉल
- 22. एसक्यूएल सर्वर साझा मेमोरी संचार प्रोटोकॉल उपयोग
- 23. सी ++ के लिए वितरित साझा मेमोरी लाइब्रेरी?
- 24. विंडोज़: साझा मेमोरी का आकार बदलें
- 25. साझा मेमोरी बैंडविड्थ फर्मि बनाम केप्लर जीपीयू
- 26. खाता साझा करना
- 27. साझा करना कैश
- 28. कुकीज़ को साझा करना
- 29. क्या ऑफसेट का उपयोग किये बिना साझा मेमोरी में पॉइंटर्स स्टोर करना संभव है?
- 30. गनिकोर्न को ठीक से कैसे रोकें
क्या आपने डेटा स्टोर करने और प्रत्येक प्रक्रिया से इसे एक्सेस करने के लिए रेडिस जैसे कुछ का उपयोग करने पर विचार किया है? जहां तक गति चलती है, साझा स्मृति के समान ही होगा। – nathancahill
मैं चाहता हूं, लेकिन हम एक जटिल ग्राफ के बारे में बात कर रहे हैं कि रेडिस में स्टोर करने का कोई आसान तरीका नहीं है (रेडिस के पास कोई निर्देशित किनारे ग्राफ या वर्तमान में AFAIK सामान्य ग्राफ समर्थन नहीं है)। – Eli
क्या समाधान आपके लिए काम करता है? यदि हाँ, क्या आप मुझे विस्तार से जान सकते हैं, आपने यह कैसे किया? – neel