Datamaskin
  | Hjem | Hardware | Nettverk | Programmering | Software | Feilsøking | Systems | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringsspråk
  • Delphi Programming
  • Java Programming
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl Programming
  • Python Programming
  • Ruby Programming
  • Visual Basics Programming
  •  
    Datamaskin >> Programmering >> Python Programming >> Content
    Hva er en Python GIL
    ? Hvis du har jobbet med Python og ønsker å begynne å eksperimentere med mer avanserte programmering teknikker , lære om global tolk lock ( GIL ) er en god idé. GIL er en algoritme som håndterer gjennomføring av flere tråder i et Python-program . GIL er et krav når du arbeider med flere tråder fordi CPython minne ledelsen er ikke trådsikre . I tillegg har GIL vært kjent for å degradere en programmer ytelse. Et eksempel er at det kan ta lengre tid for to tråder å kalle samme funksjon enn en tråd kaller funksjonen to ganger. Ved hjelp av GIL

    I en multi -threaded Python program en tråd kan ikke trygg tilgang Python gjenstander med mindre GIL er holdt av den aktuelle tråden . Den GIL sørger for at begge trådene er riktig oppdatere objekt referanser blir kalt . For å begynne å bruke GIL du trenger å lagre tråden stat på et sted variabel og slipp den globale tolk lås. På dette punktet kan du utføre din blokkerer input /output drift og søke opp globale tolk lås når det er ferdig . Til slutt , gjenopprette tråden staten fra den lokale variabelen . Du kan bruke følgende makroeksempel å forenkle prosessen :

    Py_BEGIN_ALLOW_THREADS ... Gjør noen blokkerer I /O operasjon ... Py_END_ALLOW_THREADS
    Calling Python Code

    Ofte tråder er opprettet fra andre programmeringsspråk som C , og hvis du må ringe flere tråder så må du bruke GIL . Du må først registrere disse trådene med en tolk gjennom en tråd tilstand datastruktur og deretter kjøpe GIL . For å forenkle denne prosessen kan du bruke " PyGILState_Ensure ( )" og " PyGILState_Release ( ) " funksjoner . Det følgende er et eksempel på hvordan du kan bruke dette konseptet : en

    PyGILState_STATE gstate ; gstate = PyGILState_Ensure ( ) ;/* Utføre Python handlinger her . * /resultat = CallSomeFunction ( ) ;/* evaluere resultat eller håndtere unntak * //* Slipp tråden. Ingen Python API tillatt utover dette punktet . * /PyGILState_Release ( gstate ) ;
    Python tråder

    Python en tråd er et reelt system tråd som alle andre program gjennomføring . Når du utfører en tråd Python skaper en liten datastruktur med tolken tilstand. Etter dette en ny tråd er lansert , og det kaller " PyEval_CallObject . " Det siste trinnet er en enkel C -funksjon som kjører uansett Python spesifisert. Den GIL kontrollerer nøye hver tråden kjøring . Det følgende er et eksempel på en Python tråd : en

    import timeimport threadingclass CountdownThread ( threading.Thread ) : def __ init__ (egen , teller) : threading.Thread.__init__ (egen ) self.count = countdef run (egen ) : mens self.count > 0 : print " Counting down" , self.countself.count - = 1time.sleep ( 5 ) retur
    GIL Problemer og erstatning

    Python utviklere har diskutert eliminering av GIL , men har kjørt inn noen utfordringer . Et problem som ofte nevnes med GIL er at det hindrer flertråders CPython programmer tar full nytte av multi - core prosessorer . Enhver GIL erstatning må være enkelt og samtidig når du arbeider med tråder . Må være raskere enn GIL og må ha en god API kompatibilitet. Et eksempel på API -kompatibilitet er å ha god sporing når opplisting objektene den peker til .

    früher :

     Weiter:
      Relatert Artike
    ·Hvordan å generere Odd Tall i Python 
    ·Hvordan å kode og dekode Symboler i Python 
    ·Å gjøre Histograms i Python 
    ·Prosesser I Python 
    ·Hvordan bruke Tk Toolkit Med Python 
    ·Hvordan gjøre Strengsammenkobling i Python 
    ·Hvordan vite Mål for en Array i Python 
    ·Hvordan finne adressen til en variabel i Python 
    ·Hvordan få tilgang tupler i Python 
    ·Hvordan sortere Sequence Symboler 
      Anbefalte artikler
    ·Hvordan overstyre en IFrame i JavaScript 
    ·Hvordan skrive en Array til en fil i Visual Basic 
    ·Hvordan få C Perspektiv i Eclipse 
    ·Hvordan lage en Logon Script 
    ·Hvordan sette opp en Visual Basic Form 
    ·Hva er en ActiveX- klasse 
    ·Hvordan erstatte negative heltall i en Python Array 
    ·Hvordan avslutte Visual Basic 
    ·PHP og DVD Trening 
    ·Hvordan å erklære en to-dimensjonal array i Visual Ba…
    Copyright ©  Datamaskin  http://www.datamaskin.biz/