Er Python tråder buggy?

stemmer
26

En pålitelig koder venn fortalte meg at Python nåværende multi-threading implementering er alvorlig buggy - nok til å unngå å bruke helt. Hva kan sies om dette ryktet?

Publisert på 29/08/2008 klokken 05:43
kilden bruker
På andre språk...                            


6 svar

stemmer
55

Python tråder er bra for samtidig I / O-programmering . Gjengene er byttet ut av CPU så snart de blokkerer venter på innspill fra fil, nettverk, etc. Dette gjør at andre Python tråder å bruke CPU mens andre venter. Dette vil tillate deg å skrive en multi-threaded web server eller web crawler, for eksempel.

Imidlertid er Python tråder serialiseres ved GIL når de kommer inn tolk kjerne. Dette betyr at hvis to tråder er knaser tall, bare en kan kjøre på et bestemt tidspunkt. Det betyr også at du ikke kan dra nytte av multi-core eller multi-prosessorarkitekturer.

Det finnes løsninger som kjører flere Python tolker samtidig, ved hjelp av en C-basert bibliotek gjenger. Dette er ikke for svak til hjertet og fordelene er kanskje ikke verdt bryet. La oss håpe på en alt Python løsning i en fremtidig utgave.

Svarte 29/08/2008 kl. 06:33
kilden bruker

stemmer
16

Standard implementering av Python (vanligvis kjent som CPython som det er skrevet i C) bruker OS tråder, men siden det er den globale Interpreter Lock , bare én tråd om gangen er lov å kjøre Python-kode. Men innenfor disse begrensningene, gjengingen biblioteker er robuste og brukes.

Hvis du ønsker å være i stand til å bruke flere CPU-kjerner, er det noen alternativer. Det ene er å bruke flere python tolker samtidig, som nevnt av andre. Et annet alternativ er å bruke en annen implementering av Python som ikke bruker en GIL. De to hovedalternativene er Jython og Ironpython .

Jython er skrevet i Java, og er nå ganske moden, men noen inkompatibilitet forbli. For eksempel nett rammeverket Django kjører ikke helt ennå , men nærmer seg hele tiden. Jython er stor for tråden sikkerhet , kommer ut bedre i benchmarks og har en frekk melding for de som ønsker det GIL .

Ironpython bruker .NET rammeverket og er skrevet i C #. Kompatibilitet er nådd stadiet hvor Django kan kjøres på Ironpython (i det minste som en demo), og det er guider til ved hjelp av gjenger i Ironpython .

Svarte 29/08/2008 kl. 17:17
kilden bruker

stemmer
9

Den GIL (Global Interpreter Lock) kan være et problem, men API er helt OK. Prøve ut den utmerkede processingmodulen, som implementerer den tråd API for separate prosesser. Jeg bruker det akkurat nå (om enn på OS X, har ennå til å gjøre noen tester på Windows), og jeg er virkelig imponert. Kø klassen er virkelig spare min bacon i form av å håndtere kompleksitet!

EDIT : det seemes behandlingsmodulen blir inkludert i standardbibliotek over versjon 2.6 ( import multiprocessing). Glede!

Svarte 29/08/2008 kl. 06:55
kilden bruker

stemmer
5

Så vidt jeg vet er det ingen reelle bugs, men ytelsen mens tråden cPython er virkelig dårlig (sammenlignet med de fleste andre tråder implementeringer, men vanligvis god nok hvis alle de fleste av trådene gjøre er blokk) på grunn av GIL (Global Interpreter lås), så egentlig er det gjennomføringen bestemt snarere enn språkspesifikke. Jython, for eksempel, ikke lider av denne grunn til å bruke Java tråd modell.

Se dette innlegget på hvorfor det er egentlig ikke mulig å fjerne GIL fra cPython gjennomføringen, og dette for noen praktiske utdypning og løsninger.

Gjør et raskt google for "Python GIL" for mer informasjon.

Svarte 29/08/2008 kl. 05:58
kilden bruker

stemmer
2

Hvis du ønsker å kode i python og få gode threading støtte, kan det være lurt å sjekke ut Ironpython eller Jython. Siden python kode i Ironpython og Jython kjøre på .NET CLR og Java VM henholdsvis de nyte den flotte threading støtte innebygd i disse bibliotekene. I tillegg til dette, har Ironpython ikke har GIL, et problem som hindrer CPython trådene i å dra full fordel av flerkjerne arkitekturer.

Svarte 23/02/2009 kl. 06:15
kilden bruker

stemmer
-2

Jeg har brukt det i flere programmer og har aldri hatt eller hørt av tråder å være noe annet enn 100% pålitelig, så lenge du kjenner sine begrensninger. Du kan ikke gyte 1000 tråder samtidig og forvente at programmet til å kjøre skikkelig på Windows, men du kan enkelt skrive en arbeidstaker bassenget og bare mate den 1000 operasjoner, og holde alt fint og under kontroll.

Svarte 29/08/2008 kl. 05:50
kilden bruker

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