Dator
 |  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> python Programming >> Content

    Vad är en Python GIL

    ? Om du har arbetat med Python och vill börja experimentera med mer avancerade programmering tekniker , lära sig om globala tolk lås ( GIL ) är en bra idé . GIL är en algoritm som hanterar genomförandet av flera trådar i ett Python -program . GIL är ett krav när du arbetar med flera trådar eftersom CPython minne management är inte trådsäker . Dessutom har den GIL varit kända för att försämra en program prestanda. Ett exempel är att det kan ta längre tid för två trådar för att ringa samma funktion än en tråd att anropa funktionen två gånger. Använda GIL

    I en multi - trådad Python -program en tråd kan inte säkert komma Python objekt såvida GIL innehas av den aktuella tråden . Den GIL ser till att båda trådarna är korrekt uppdatering av objekt referenser som anropas. För att börja använda GIL du behöver spara tråden staten i ett läge variabel och släpp den globala tolk låset . På denna punkt kan du utföra ditt blockerande input /output funktion och återfå den globala tolk låset när den är klar . Slutligen återställa tråden tillståndet från den lokala variabeln . Du kan använda följande makro exempel att förenkla processen :

    Py_BEGIN_ALLOW_THREADS ... Gör några blockerande I /O-operation ... Py_END_ALLOW_THREADS Addera Calling Python kod

    Ofta trådar skapas från andra programmeringsspråk såsom C och om du behöver ringa flera trådar då du behöver använda GIL . Du måste först registrera dessa trådar med en tolk via en tråd tillstånd datastruktur och sedan förvärva GIL . För att förenkla denna process kan du använda " PyGILState_Ensure ( ) " och " PyGILState_Release ( ) " -funktioner . Följande är ett exempel på hur man kan tillämpa detta begrepp :

    PyGILState_STATE gstate , gstate = PyGILState_Ensure ( ) ;/* Utföra Python åtgärder här . * /resultat = CallSomeFunction ( ) ;/* utvärdera resultatet eller hantera undantag * //* Släpp tråden . Ingen Python API tillåtet bortom denna punkt . * /PyGILState_Release ( gstate ) ,
    Python Threads

    Python en tråd är ett verkligt system tråd som alla andra program körs. När du utför en tråd Python skapar en liten datastruktur med tolken staten . Efter detta en ny tråd lanseras och det kallar " PyEval_CallObject . " Det sista steget är en enkel C-funktion som körs oavsett Python specificeras . Den GIL kontrollerar noggrant varje tråd utförande . Följande är ett exempel på en Python tråd :

    import timeimport threadingclass CountdownThread ( threading.Thread ) : def __ init__ (själv , räkna ) : threading.Thread.__init__ (egen ) self.count = countdef run (själv ) : medan self.count > 0 : print " Räkna ner " , self.countself.count - = 1time.sleep ( 5 ) tur
    GIL Problem och ersätter

    Python -utvecklare har diskuterat avskaffandet av GIL men har stött på en del utmaningar . Ett problem som ofta nämns med GIL är att det förhindrar flertrådade CPython program från att dra full nytta av multi - core processorer . Varje GIL ersättare måste vara enkelt och samtidigt när du arbetar med gängor . Måste vara snabbare än GIL och måste ha en bra API kompatibilitet . Ett exempel på API-kompatibilitet är att ha bra spårning när räkna föremålen den pekar på . Addera

    Tidigare:

    nästa:
    relaterade artiklar
    ·Vad är en SQL Object
    ·Användningen av Python Numeric.Arange funktion
    ·Hur till Aktivera en knapp med wxPython
    ·Att läsa och skriva filer i Python
    ·Hur Dump Text till Hex i Python
    ·Screen Tutorials för Python
    ·Python Listbox
    ·Hur man sållar ett nummer i en sekvens
    ·Vad är en Python Subpackage
    ·Hur Lista diskar i Python
    Utvalda artiklarna
    ·Hur Flush Produktionen under bearbetning i PHP
    ·Hur man lär sig att koda en mikrokontroller i C
    ·Hur man börja programmera i församlingen
    ·Vad är Microsoft Visual C + +
    ·Hur är en Gaussisk Sannolikhet anordning som används
    ·Hur vill kolla om det finns en mapp i Vb.Net
    ·Hur man gör en String Versaler Använda Python
    ·Hur man skapar en Validate Field i VB6
    ·Hur man uppdaterar Python till 2,6
    ·Hur man byter Div Codes
    Copyright © Dator Kunskap http://www.dator.xyz