Hvordan lage Ruby eller Python nettsider for å bruke flere kjerner?

stemmer
7

Selv om Python og Ruby har en kjerne tråd per tolk gjenge, de har en global tolk lås (GIL) som brukes til å beskytte potensielt delte datastrukturer, slik at dette hemmer multi-prosessor utførelse. Selv om delene i disse languajes som er skrevet i C eller C ++ kan være fri-threaded, det er ikke mulig med ren tolket kode med mindre du bruker flere prosesser. Hva er den beste måten å oppnå dette? Ved hjelp av FastCGI ? Opprette en klynge eller en gård av virtualiserte servere? Å benytte seg av Java-ekvivalenter, JRuby og Jython?

Publisert på 31/08/2008 klokken 21:41
kilden bruker
På andre språk...                            


5 svar

stemmer
4

'Standard' måte å gjøre dette med rails er å kjøre en "pakke" av Bastard tilfeller (dvs: 4 kopier av rails programmet) og deretter bruke apache eller Nginx eller noen andre stykke programvare for å sitte foran dem og handle som en lastbalansering.

Dette er trolig hvordan det gjøres med andre ruby ​​rammeverk som Merb etc, men jeg har ikke brukt dem personlig.

OS vil ta seg av å kjøre hver kjøter på sin egen CPU.

Hvis du installerer mod_rails aka Phusion passasjer vil den starte og stoppe flere kopier av rails prosessen for deg også, så det vil ende opp med å spre belastningen over flere prosessorer / kjerner på en lignende måte.

Svarte 31/08/2008 kl. 22:41
kilden bruker

stemmer
4

Jeg er ikke helt sikker på hvilket problem du vil så løse, men hvis du distribuerer python / django søknad via en apache prefork MPM hjelp mod_python apache vil starte flere arbeidsprosesser for håndtering av ulike forespørsler.

Hvis en forespørsel trenger så mye ressurser, som du ønsker å bruke flere kjerner ta en titt på pyprocessing . Men jeg tror ikke det ville være klokt.

Svarte 31/08/2008 kl. 21:53
kilden bruker

stemmer
1

I Python og Ruby er det bare mulig å bruke flere kjerner, er å opprette nye (tunge) prosesser. Java-kolleger arve mulighetene for Java-plattformen. Du kan innebære bruk Java tråder. Det er for eksempel en grunn til at noen ganger (ofte) Java Application Server som Glassfish brukes for Ruby on Rails applikasjoner.

Svarte 10/10/2008 kl. 07:18
kilden bruker

stemmer
1

Bruker et grensesnitt som løper hver reaksjon i et separat tolk, slik som mod_wsgifor Python. Dette lar multi-threading brukes uten å møte GIL.

EDIT: Tilsynelatende mod_wsgistøtter ikke lenger flere tolker per prosess fordi idioter ikke kunne finne ut hvordan du skal gjennomføre tilleggsmoduler. Den støtter fortsatt kjører forespørsler i separate prosesser FastCGI-stil, skjønt, så det er tydeligvis den nåværende aksepterte løsningen.

Svarte 31/08/2008 kl. 21:43
kilden bruker

stemmer
0

For Python, den PyProcessing gjør prosjektet du å programmere med prosesser mye som du ville bruke tråder. Det er inkludert i standard bibliotek med den nylig utgitte 2.6 versjonen multiprocessing. Modulen har mange funksjoner for å etablere og kontrollere tilgang til delte datastrukturer (køer, rør, etc.) og støtte for vanlige uttrykksformer (dvs. ledere og arbeider bassenger).

Svarte 10/10/2008 kl. 13:24
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more