Vysvětlí mi někdo, proč v interpretovaném jazyce používat low-level threading a ne procesy? Ladění chuťovek jako race-conditions ať si klidně nechají pluskaři.
Více vláken v Pythonu bez GIL
Multithreadové programování v Pythonu je známé tím, že i když použijete na zpracování úlohy více vláken, většinu času stejně běží jen jedno. Může za to tzv. global interpreter lock (GIL). Komunita kolem Pythonu přišla s projektem newthreading, který by měl tento problém řešit. Zatím nepřináší nějaké zvláštní výkonové zlepšení, ale je to důkaz, že to opravdu jde a po několika úpravách by se v budoucnu mohl dostat i do běžného Pythonu.
Dále čtěte…
- Přijďte 5. června na Python/Django sprint v Praze 24. 5. 2012 11:19
- Vyšel Python 2.6.8, 2.7.3, 3.1.5 a 3.2.3 16. 4. 2012 13:36
- Dvanácté setkání Python/Django vývojářů v Praze 20. 3. 2012 17:53
- Setkání Python/Django vývojářů v Praze 15. 2. 2012 10:26
- Vývoj Qt+HTML aplikací 6. 2. 2012 10:41
Re: proč?
celé vláknoHe, mne pripada vtipne, jak se Python snazi tvarit jako super jazyk, ale pritom ma dost nevhodny vlastnosti. Osobne se mi na pythonu nelibi:
- nutnost odsazovani: jde zapsat python kod do jedne radky na cmdline a pouzivat ho jako filtr, jak to umi vetsina interpretovanych jazyku (perl, awk, bash) a jak jsem zvyklej i z dalsich cmdline utilitek (sed, grep, tr)?
- bloky urcovane poctem whitespace v odsazeni: neni nic „prijemnejsiho“, nez po upraveni ciziho kodu hledat spatne odsazeni, kdy jeden pouzil taby a druhy space. Fakt „super“ myslenka.
- vyucovat OOP na prikladu re.match(„c“, „abcdef“): tohle je hodne velka vec, kterou na pythonu nesnasim. Misto aby se volala matoda „match“ na objekt retezec (at uz ve vyznamu regexpu nebo prohledavaneho retezce) a pak se mu posilal druhy retezec jako parametr, tak se vola metoda na tridu se dvema parametry. Diky tomuhle se zacatecnici (pro ktere je python urcen) blbe nauci, ze objekty se pouzivaji zpusobem trida.metoda(hafo parameteru). Radsi bych videl priklady „abcdef“.match(„/regexp/“).
- no a ted ty thready: to musi byt opravdu bezva jazyk, kdyz v nem clovek napise multithread aplikaci a pak stejne bezi jenom jeden thread. Mi to pripada (podobne jako objekty), ze tvurce pythonu rekl „dame tam objekty a vlakna, ale metody budeme volat na tridy a vlakno nechame bezet jednom jedno, aby to nedelalo problemy, aby se to naucili i zacatecnici, ale hlavni je, ze python bude objektovy a vicevlaknovy“.
PS: Adresa pochazi z Toru, nejsem v DE.
Re: proč?
celé vláknoWhitespace bloky jsou náhodou super věc. Za prvé se rychleji píše, za druhé je výsledný kód přehlednější.
To, že každej používá jiný odsazení, to je daň za hezčí kód. Nicméně od toho tu jsou coding styly, který by se měli dodržovat a věřím, že to většina lidí dělá.
Re: proč?
celé vláknoJak se stane, ze se pise rychleji? A v cem je kod prehlednejsi? Neni spis lepsi, kdyz se necha formatovani na editoru a nemusi to resit kazdy rucne? Myslim, ze to bude vic prehledne nez kdyz bude kazda pes jiny ves.
Re: proč?
celé vláknoPřesně takhle se to s pythonem dělá, nechá se to na editoru.
Re: proč?
celé vláknoNo dovedu si predstavit, ze editor pozna kde zacina blok. Ale jak pozna kde konci? Nebo se sam rozhoduje co odsadit a co ne? :-)
Re: proč?
celé vláknoJaký je rozdíl mezi tím, když napíšu ‚}‘ a ‚<Backspace>‘? …k tomu prvnímu zpravidla potřebuju stisknout dvě klávesy. A není překvapením, že pro ‚{‘ a ‚<TAB>‘ platí to samé. Já teda v Pythonu nikdy nic velkého nedělal, jsem odkojený na jazycích vycházejících ze syntaxe C, ale s tímhle bych neměl nejmenší problém.
Re: proč?
celé vláknoMuj oblibeny editor s { hodi i } a po entru odsazuje inteligentne, takze vetsinou to je jeden uhoz na cely blok, zadne BS ani taby nemusim resit. Pokud je blok bez zavorek, tak je to jeden BS.
Rivon rekl, ze se to v pythonu pise rychleji, tak jsem chtel vedet jak je to udelane. Ja v tom prave taky zadny patrny rozdil nevidim.
A ano, ja s pythonim pristupem problem mam, protoze neco tak vagniho a nepodstatneho jako je whitespace pouziva pro tak dulezitou vec jako je definice bloku. Ale to neni predmetem tohoto vlakna ;-)
Re: proč?
celé vláknoJako učitel, který se má vyznat v kódu svých žáků můžu říc, že právě v povinném odsazování vidím výhodu.
Mimochodem další doporučení pro formátování:
http://www.python.org/doc/essays/styleguide.html#comments
IMHO: Žádný jazyk není dokonalý, ať každý používá to, co mu vyhovuje.
Re: proč?
celé vláknoJestli je to skutecne tak, ze vasi zaci mohou pouzit co jim vyhovuje, tak veskere formatovani bud vyresi automaticky pred odeslanim, nebo v pythonu resi mezery. Porad nevidim v cem je vyhoda delat rucne neco co zvladne stroj lepe a rychleji.
Re: proč?
celé vláknokdyz v tom nevydite vyhodu tak to nepouzivajte. Nekonstruktivne komentare tohto typu si mozte odpustit
Re: proč?
celé vláknoJa se cele vlakno snazim dopatrat jak to python dela, ze se v nem bloky pisi rychleji a jsou prehlednejsi (jak tvrdi Rivon) a zatim jsem se nedockal. Nikdo mi to neobjasnil, v cem je to lepsi, nanejvys ze to vyjde nastejno. Prave ten muj predchozi komentar se snad pta jasne a konstruktivne a zrovna vy jste mi neodpovedel nijak. Vy reagujete takovym tim zpusobem „kdyz ty nevis, tak ja ti to nereknu“.
Nekteri rikaji, ze vynuceny manualni format je lepsi nez automaticky. V cem? Nekteri ze psani je snadnejsi. V cem? Uz to tu nekdo psal, ale melo to mouchy, ve vysledku mi to porad vyslo nastejno.
Re: proč?
celé vláknoNa první pohled je totiž vidět, kde blok začíná a kde končí. To je velká výhoda oproti C,C++,…, kde musíte pořád počítat závorky a doufat, že jsou všechny tam, kde mají být. V závorkách se často dělávají chyby, takže když to v Pythonu odpadá, tak se musí zákonitě psát pythonovské bloky rychleji.
Re: proč?
celé vláknoProminte, ale ja mam cim dal vic, pocit, ze mi tady unika nejaka brilantni myslenka a opravdu se ji chci dopatrat a jsem cim dal zvedavejsi, protoze pokud to funguje jak rikate, tak je to skutecna revoluce v programovani.
Tak dejme tomu, ze pisu relativne ciste treba v jave, metody maji nanejvys 10 radku. V tech par zavorkach se vyznam a orientuju se dle odsazeni ktere automaticky udelal editor behem psani. Takze podle odsazeni vidim hned, kde jsou bloky a jaky maji rozsah. V cem _konkretne_ je to v pythonu prehlednejsi?
Pisu novy kod. O jednoradkove bloky se vubec nestaram, editor sam odsadi tam i zpet. U vice radkovych zacnu {}, editor sam odsadi, jen na konci musim rict, ze blok konci tim, ze preskocim }. Cili 0+2 uderu navic. Je v pythonu nejaka magie, ktera sama pozna kde ma blok koncit, takze je to opravdu mene prace? Pokud ne, tak jaky je rozdil mezi ukoncenim bloku zavorkou a odsazenim? Opet prosim konkretne.
Jaky je rozdil mezi tim, kdy nekdo napise blbe zavorku a pak to ma blbe odsazene (protoze to je po zformatovani ekvivalentni), nebo nekdo blbe odsadi a pak to ma blbe odsazene?
Re: proč?
celé vláknoJaky je rozdil mezi tim, kdy nekdo napise blbe zavorku a pak to ma blbe odsazene (protoze to je po zformatovani ekvivalentni), nebo nekdo blbe odsadi a pak to ma blbe odsazene?
Rozdíl je v tom, že to druhé je samozřejmé, zatímco to první závisí na editoru.
Re: proč?
celé vláknoJá mohu potvrdit, že se v něm skutečně píše rychleji
člověk nemusí řešit spoustu věcí syntaxe, protože to za něj vyřeší bloky.
Já vím, že existují supr dupr našláplé editory, ale zase takové závorkové peklo se v pythonu (narozdíl od C, PHP a podobných jazyků) podaří jen zřídka. To pak brzdí a ikdyž to editor chytře zformátuje, tak do toho musí člověk chvíli koukat, než se zorientuje, což v pythonu nebývá problém.
člověk nemusí řešit 10000 různých způsobů concatnutí objektu (jako třeba paskvil jménem PHP). Prostě tam, kde to lze se jednodušeji všude používá +. Je to jazyk s dynamickým typováním, takže člověka upozorní na prasárny a zároveň mu umožní dostatečně flexibilní práci s proměnnými.
Re: proč?
celé vláknoPsaní je snadnější např. proto, že se nepíšou středníky, tím pádem nemusím mačkat klávesu středníku a taky nemůžu na středník zapomenout. Prostě napíšu každý příkaz na jeden řádek a to stačí.
Re: proč?
celé vláknoVe schopném editoru jako např. Vim se s pythoním kódem pracuje dost pohodlně. Absence závorek na ohraničení bloku má tu výhodu, že na zkopírování bloku stačí zkopírovat řádky. Nemusím nikde lovit závorky, nikde mi závorka nemůže chybět nebo přebývat.
Re: proč?
celé vláknoTady mi prijde, ze bud ma ten kod smysl prenest bez zavorek, nebo se zavorkami, ale pak i s pripadnym for, if… ktere je na zacatku. Takze je to jen o vyberu dalsich 2 radku, nejake velke loveni tam nevidim.
Jak pak resite odsazeni v cilovem miste? V beznem jinem jazyku je to na jednu klavesovou zkratku…
Re: proč?
celé vláknoVe vimu stačí na přizpůsobení odsazení zmáčknout před vkládacím příkazem ‚]‘, např. ]p
Re: proč?
celé vláknoV beznem editoru je odsazeni celeho bloku taky na jednu klavesouvou zkratku ;)
Re: proč?
celé vláknoHouby v tom máte naprogramované a ajtak budete remcať. S Pythonom robím krátko, ale ešte ani raz sa mi nestalo, že by som mal chybu v odsadení. A rovnako sa mi ani nestalo, že by som sa nad týmto nejako pozastavil a videl v tom problém, pri programovaní mi to vôbec nedojde.
Re: proč?
celé vláknoAno, nic jsem v tom nenapsal :-). Ja nerikam, ze by v tom delal chyby clovek, ani u zavorek to neresim. Ale u jinych jazyku na whitespace nezalezi, treba html to primo zahazuje, tak mi to prijde takove nejiste. Ale to je pro tuhle diskuzi fakt jedno.
Re: proč?
celé vláknoPokud casto resite problem s indentaci namichanou z tabu a spacu, zkuste spoustet python s prepinacem „-tt“.
Pokud jde o re.match, tak to „re“ neni trida, ale modul, tedy jakasi knihovna funkci. Pokud chcete vice OOP pristup, zkuste re.compile a objekty, ktere poskytuje.
Jinak muzu doporucit napr. http://docs.python.org/tutorial/ a nebo http://www.amazon.com/Python-Dummies-Stef-Maruch/dp/0471778648. Kdyz u se s tim nenaucite v Pythonu programovat, alespon vam to pomuze stezovat si na relevantni veci…
Re: proč?
celé vláknoMne zase prijde vtipne, ze toho moc lidi nevi a pak pise takove blbosti.
1) Odsazovani je navrzeno prave z duvodu nucene prehlednosti kodu. Vetsina plikaci je velmi citelna i v pripade, ze citatel neni autor. To se o jinych jazycich tvrdit neda.
2) Mix tab/space je hnus vsude. Ja osobne mam vsude prepisovani na mezery. Pak je to videt vsude stejne.
3) uz tu nekdo psal, ze re je modul. match je funkce v modulu re. Pokud chcete objekt je nutne vytvorit instanci, v tomto pripade faktory re.compile. Nechapu proc by mel mit string rovnou metody pro regularni vyrazy. To mi neprijde koncepcni. Takto se lepe rosiruje funkcnost.
4) Thready jsou bezva a jsou bezva i v pythonu. Jsou tam z duvodu jednodussi implementace a ne pro zvyseni vykonu. Pro vyssi vykon se daji vytvorit podprocesy. Nechapu, ze si tolik lidi mysli, ze thready jsou jen kvuli rychlosti.
Re: proč?
celé vlákno1) Takovej kod se pak hure merguje, protoze je treba hlidat i bile znaky. Citelnost kodu je dana zejmena tim, kdo kod napsal, jazyk to ovlivni minimalne.
4) Globalni zamek tam je jen a pouze kvuli tomu, ze to je mnohem snazsi na implementaci. Zadnou jinou vyhodu to nema.
Re: proč?
celé vlákno1) Odsazovani je u me az na xtem miste co se tyce prehlednosti kodu a navic vec, ktera se v rozumnych jazycich vyresi jednim uderem i v pripade, ze je autor rekneme nekonvencni
2) natozpak kdyz se to prozene nejakym slepovadlem, kde se ze vseho udela jedna mezera, to to pak vypada opravdu vsude stejne :-) Ja zas pouzivam taby, pak si to kazdy muze nastavit podle sebe a nemusi si zvykat na zvyky nekoho jineho.
4) Treba si to lide mysli proto, ze by se jim to hodilo jako potrava pro dalsi jadra na cpu…
Pripada mi, ze navrhar pythonu jim vyresil problemy ktere neexistovaly, za cenu vynalezeni problemu novych.
Re: proč?
celé vlákno> – nutnost odsazovani: jde zapsat python kod do jedne radky na cmdline
Jde. Lidem, co píšou malichernosti typu jabber server na této vlastnosti většinou příliš nezáleží.
> – neni nic „prijemnejsiho“, nez po upraveni ciziho kodu hledat spatne odsazeni
Chtěl bych vidět někoho, kdo přijme patch, který bude mít tu skvělou vlastnost, že nebude dodržovat nastolené formátování (tzv. coding style) pro kód v libovolném jazyce.
> – vyucovat OOP na prikladu re.match(„c“, „abcdef“): tohle je hodne velka vec, kterou na pythonu nesnasim.
Je problém vyučujícího, pokud vyučuje OOP na neobjektových příkladech.
> – no a ted ty thready: to musi byt opravdu bezva jazyk, kdyz v nem clovek napise multithread aplikaci a pak stejne bezi jenom jeden thread.
Běžná praxe, jazyky využívající green threads touto „vlastností“ obvykle disponují. Neužiješ si sice dvou cpuček při konverzi do mp3jek, spoustě jiných (například síťových aplikací) to ale nevadí.
Re: proč?
celé vlákno> Chtěl bych vidět někoho, kdo přijme patch…
Ja, tady jsem. Stejne davam pred commitem format celyho zdrojaku, tak mi je jedno jak to prijde.
Re: proč?
celé vláknoTakze commitnete patch plny zbytecnych zmen formatovani v tech castech kodu, ktere napsal nekdo jiny? :)
Re: proč?
celé vláknoReagoval jsem na to, jestli prijmu patch s rozdrbanym formatem – pokud bude jinak ok, tak ano a zformatuju to predtim. Je to muj projekt, tak tam prece nedojde ke zmenam v jinych castech.
Vy patrne mate na mysli pripad kdy prispivam nekam jinam ja, cili patch posilam. V tom pripade si nastavim formatovani pouzite v tom projektu, takze zbytek bude netknuty a moje cast bude dodrzovat styl. Pokud projekt zadny styl nema, tak bud zavru oci nebo utecu :-)
V praci opravuju formatovani v castech ktere jsou rozdrbane ze se to cist neda. Je to uzavrena spolecnost, tak si to vyrikame. V takovem pripade udelam samostatny commit jen s opravami formatu a myslim ze to neni zbytecna zmena.
Re: proč?
celé vláknoJe mi sice jasne, ze zivim trolla, ale:
GIL neni ve specifikaci pythonu, je to pouze vlastnost jedne (byt nejoblibenejsi) jeho implementace – CPythonu. Jsou i jine implementace, ktere GIL nemaji a vlakna tam pak bezi skutecne konkurentne.
Nadavani na nutnost osazeni je obvykle reakce lidi, kteri v Pythonu nepisi. Pokud v nem pisete vic, zvyknete si a prijde vam to prirozene. Sice nemuzete napsat rozsahly filtr na jeden radek, ale je otazka, jestli je to takova skoda :).
Re: proč?
celé vláknoTak já třeba vím o jedné věci, která důvodem proti rozhodně není. Taková race condition se nijak neomezuje na aplikace využívající vlákna. Vlánka patřící jednomu procesu mají obvykle „trošinku problém“ s během na různých počítačích, zato race condition je „oblíbenou“ třídou problémů vyskytujících se u distribuovaných aplikací.

