2011-10-29 11 views
5

Używam django na skręcanym w pojemniku wsgi. Oczywiście unikam wszystkich rzeczy asynchronicznych z odroczeniami wewnątrz mojego kodu django, ponieważ zgodnie z dokumentacją, skręcone możliwości asynchroniczne nie są dozwolone wewnątrz aplikacji WSGI.Używanie skręconych słów w kontenerze WSGI

Jednak chciałbym użyć twisted.words w mojej aplikacji WSGI do wysyłania żądań do serwera Jabber. Czy to się liczy jako asynchronizacja lub czy mogę go użyć w mojej aplikacji? Co by się stało, gdybym wysłał twisted.words prośby jabber do serwera xmpp wewnątrz WSGI?

Co więcej, mam bardziej ogólne pytanie. Czy istnieje jakikolwiek powód, dla którego kontener WSGI twisted jest wielowątkowy (czy jest to wielowątkowy?), Ponieważ jest on dobrze znany z GIL Pythona tylko zmniejsza ogólną wydajność skryptu z wątkami.

Dzięki za odpowiedzi.

Odpowiedz

0

Aby wywołać funkcję w głównej pętli zdarzeń (wątek we/wy) w Skręcony z innego wątku (wątek inny niż I/O, tj. Wątek aplikacji WSGI), można użyć reactor.callFromThread(). Jeśli chcesz poczekać na wyniki, użyj threads.blockingCallFromThread(). W ten sposób można wywoływać funkcje, które używają twisted.words Zobacz Using Threads in Twisted.

Aby sprawdzić, czy pojemnik wsgi jest wielowątkowy, sprawdź, czy w przypadku skręconego pojemnika sprawdzana jest wartość true.

Kontenery WSGI są wielowątkowe, obsługują więcej niż jedno żądanie na raz (nie jest to bezwzględnie konieczne, ale ułatwia życie przy użyciu istniejącego oprogramowania). W przeciwnym razie (jeśli nie użyjesz innych sposobów, aby go rozwiązać) twój cały serwer blokuje się, podczas gdy twój moduł obsługi żądań czeka na odpowiedź z bazy danych. Niektórzy uważają, że prostsze jest pisanie instrukcji obsługi, mniej martwiąc się o blokowanie innych żądań, jeśli nie ma wielu jednoczesnych żądań.

Funkcje w języku Python, które wykonują zadania intensywnie obciążające procesor, gdy wydajność ma znaczenie, można wykorzystać biblioteki, które uwalniają GIL podczas obliczeń lub odciążają je do innych procesów. Sieć, dyskowe operacje we/wy, które często występują w aplikacjach webowych, są zwykle znacznie wolniejsze niż procesory.

Powiązane problemy