2013-02-03 12 views
23

Moje aplikacje Flask muszą wykonać dość duże obliczenia, aby pobrać określoną stronę. Podczas gdy Flask wykonuje tę funkcję, inny użytkownik nie może uzyskać dostępu do strony internetowej, ponieważ Flask jest zajęty dużymi obliczeniami.Obsługa wielu wniosków w Flask

Czy jest jakiś sposób, aby umożliwić mojej aplikacji Flask przyjmowanie żądań od wielu użytkowników?

+1

do odciążenia dużych obliczeń, które można wykorzystać [selera] (http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html). Może wykorzystywać wiele procesów, wątków, mikroprocesorów do wykonywania zadań. – jfs

Odpowiedz

38

Tak, wdrożyć aplikację na innym serwerze WSGI, patrz Flask deployment options documentation.

Komponent serwera dostarczany z Flask jest przeznaczony tylko do opracowywania aplikacji; mimo że może być skonfigurowany do obsługi równoczesnych żądań (z app.run(threaded=True)). Powyższy dokument wymienia kilka opcji dla serwerów, które mogą obsłużyć równoczesne żądania: i są znacznie bardziej niezawodne i nadające się do dostrajania.

+0

skorzystam z mojej szansy, aby zapytać tutaj w komentarzach - w jaki sposób zaproponowałbyś te 5 wymienionych w dokumentacji? –

+1

@IgnasB .: Przepraszamy, zależy to w dużej mierze od scenariuszy użycia, doświadczeń i wdrożeń. Nie mogę powiedzieć, że użyłem wszystkich 5, więc nie zamierzam wydawać rekomendacji. –

+0

Dzięki, to działa! Mam tylko jeden (dość ważny) problem: jeśli użytkownik uzyskuje dostęp do strony, ale wychodzi przed wykonaniem obliczeń, obliczenia są kontynuowane aż do zakończenia. Jak mogę zatrzymać obliczenia, jeśli użytkownik opuści? –

1

W przypadku żądań, które wymagają dużo czasu, warto rozważyć rozpoczęcie dla nich zadania w tle.

+0

Co to jest długi czas? Powiedziałbym, że 10 sekund to dużo czasu? A może coś ponad minutę długo? Zgaduję, że jest to zależne od aplikacji, ale czy są jakieś reguły kciuka? – Arturo

+0

Nie chcesz, aby twoja prośba o przyznanie limitu czasu lub twoi użytkownicy myśleli, że jest po prostu zablokowana, myślę, że 10 sekund jest już ryzykowne, cokolwiek więcej, to za długo. – LtWorf