2014-12-02 20 views
13

Web servisimde kullandığım büyük bir salt okunur veri yapısına (ağ üzerinde yüklü bir grafik olmasına rağmen bu önemli olmamalı) sahibim. İnternet servis birimi Flask'ta inşa edildi ve daha sonra Gunicorn aracılığıyla sunuldu. Çıktığım her silah işçisi için, çalışanın veri yapısının kendi kopyasını taşıdığı ortaya çıkıyor. Böylece, bir işçiyle mükemmel bir şekilde yönetilebilen ~ 700mb veri yapım, 8'i çalıştırdığımda oldukça büyük bir bellek kıskacına dönüşüyor. Bu veri yapısını gunicorn süreçleri arasında paylaşabileceğim herhangi bir yol var mı bu yüzden çok fazla boşa harcamam gerekmiyor?Gunicorn'da Bellek Paylaşımı?

+0

Verileri depolamak ve her işlemden erişmek için Redis gibi bir şey kullanmayı düşündünüz mü? Hıza kadar paylaşımlı belleğe çok benzer olurdu. – nathancahill

+0

İsterdim, ancak karmaşık bir grafikten bahsediyoruz ki Redis'te saklamak için kolay bir yol yoktur (Redis'in şu an AFAIK yönelimli grafikler veya genel grafik desteği yoktur). – Eli

+1

Çözüm sizin için mi çalışıyor? Eğer evet eğer bana ayrıntılı olarak bilgi verebilir misiniz, nasıl yaptınız? – neel

cevap

6

Bunu yapmanın en kolay yolu, preload_app seçeneğini kullanarak tell gunicorn to preload your application seçeneğidir. Alternatif

from flask import Flask 
from your.application import CustomDataStructure 

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

# @app.routes, etc. 

, sen gevent with gunicorn (eğer özel veri yapısı ile paylaşılan hafızayı sarabilirsiniz ise) bir memory-mapped file size sağlamak için kullanabilirsiniz: Bu, bir modül düzeyi değişkeni olarak veri yapısını yükleyebilir varsayar IPC'yi kullanarak bağlandığınız tek bir işlem veya the multi-processing module to spin up your own data-structure server'u kullanıyorsunuz.

+0

önyükleme seçeneği çalışmıyor, bazı kukla veri yapısı ile nasıl kullanılacağını gösteren bir örnek verebilir misiniz? – neel

+0

@neel - kurulumunuzun bir örneği ve çalışmayan bir başka soru sormaktan muhtemelen daha iyisiniz. –

+0

http://stackoverflow.com/questions/35914587/how-to-get-a-concurreny-of-1000-requests-with-flask-and-gunicorn Buraya soru yükledim Eğer bakarsan harika olur bir kez. Şimdiden teşekkürler. – neel

İlgili konular