2014-07-18 16 views
5

Mam aplikację Flask, która akceptuje żądania HTTP. Kiedy przychodzą określone żądania HTTP, chcę wyzwolić komunikat w strumieniu zeromq. Chciałbym, aby strumień zeromq był cały czas otwarty. Zastanawiam się, jaki jest odpowiedni sposób na zrobienie tego. Ponieważ zaleca się używanie gunicorn z flaską w produkcji, nie oznacza to, że będzie wiele instancji aplikacji Flask, a jeśli ustawię połączenie zeromq w tym samym miejscu co aplikacja Flask, tylko jedna z nich będzie w stanie połączyć się, a inne zawiedzie.Jaki jest właściwy sposób użycia kolby z zeromq w produkcji?

Odpowiedz

0

ZeroMQ nie będzie ponownie używał kontekstu dla różnych wątków. To samo dotyczy gniazd.

Jeśli uda się zachować gniazdo używane wyłącznie przez jeden wątek w obszarze roboczym, można ponownie użyć gniazda .

W każdym razie, zacznę od utworzenia nowego kontekstu i gniazda z każdym żądaniem i zobaczę, czy jest , jakakolwiek potrzeba, aby przejść do złożoności udostępniania połączenia ZeroMQ. Konfiguracja ZeroMQ jest często dość szybka.

0

Czy gniazdo ZMQ w Twojej aplikacji connect() -ing, czy jest to bind() -ing? Jeśli Twoja aplikacja jest uważana za klienta i łączy się z nią, wiele instancji powinno mieć możliwość połączenia się bez problemu. Jeśli jest uważany za serwer i jest wiążący, to tak, będziesz miał problemy ... ale w twoim przypadku wydaje się, że powinieneś rozważyć, że twoja aplikacja Flask jest bardziej tymczasowa, a tym samym klient, a drugi koniec. bardziej niezawodny, a tym samym serwer.

Trudno jednak udzielić konkretnej porady bez kodu, a dzięki niewielkim informacjom mogę jedynie intuicyjnie zrozumieć.

3

Używam obiektu threading.local() do przechowywania obiektów kontekstu i gniazda zeromq.

W ten sposób mogę ponownie użyć już połączonych gniazd wewnątrz wątku, przy jednoczesnym zapewnieniu, że każdy wątek będzie miał własne obiekty gniazda.