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
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.
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ć.
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.
- 1. Jaki jest właściwy sposób użycia wstrzykniętego fasoli w metodzie statycznej?
- 2. Jaki jest właściwy sposób przekierowania?
- 3. jaki jest właściwy sposób korzystania z scala.io.Source?
- 4. Jaki jest właściwy sposób korzystania z PushSharp?
- 5. Jaki jest właściwy sposób liczenia w Railsach?
- 6. Jaki jest właściwy sposób korzystania z PreparedStatementCreator w Spring JDBC?
- 7. Jaki jest właściwy sposób załadowania ListBox?
- 8. Jaki jest właściwy sposób dołączania nagłówków Qt?
- 9. Jaki jest właściwy sposób testowania wydajności NFS?
- 10. Jaki jest właściwy sposób inicjowania QList?
- 11. Jaki jest właściwy sposób odłączania kontrolera MediaController?
- 12. Jaki jest właściwy sposób obsługi ciągów char *?
- 13. Rozmieszczanie kolby w Windows w produkcji
- 14. Jaki jest właściwy sposób określenia lokalizacji aplikacji?
- 15. Jaki jest właściwy sposób korzystania z projection.stream() D3?
- 16. R: Jaki jest właściwy sposób nadpisywania funkcji z paczki?
- 17. Właściwy sposób użycia zmiennych instancji/właściwości/synthetize z ARC
- 18. Jaki jest "właściwy" sposób usuwania plików z migawki ClearCase?
- 19. Jaki jest właściwy sposób umieszczania list w akapicie w HTML5?
- 20. Jaki jest właściwy sposób włączenia REPLIKU przeglądarki na stronę, ale tylko w fazie rozwoju?
- 21. Jaki jest właściwy sposób wybierania i łączenia obiektów z LINQ?
- 22. Jaki jest właściwy sposób zamykania i czyszczenia połączenia z gniazdem?
- 23. Jaki jest właściwy sposób obsługi JSONP z CakePHP?
- 24. "Właściwy" sposób na ciągnięcie git "gałęzi produkcji" do serwera produkcyjnego
- 25. Jaki jest właściwy/właściwy sposób na sprawdzenie, czy obiekt jest obiektem jQuery w javascript?
- 26. Jaki jest właściwy sposób wysyłania Alt + Tab w Ahk?
- 27. Jaki jest właściwy sposób inicjowania pustych ciągów w PHP?
- 28. Jaki jest właściwy sposób zarządzania przydzieloną pamięcią w obcym języku?
- 29. Jaki jest właściwy sposób kontrolowania powiązanych obiektów w javascript?
- 30. Jaki jest właściwy sposób przechowywania nazwy pliku w formacie XML?