| Home  | Casa  | Hardware  | Networking  | Programmazione  | Software  | Domanda  | Sistemi  |   
Programmazione  
  • C /C + + Programming

  • Computer Programming Languages

  • Delphi Programming

  • Java Programming

  • Programmazione Javascript

  • PHP /MySQL Programmazione

  • Perl Programming

  • Python Programming

  • rubino Programmazione

  • Nozioni di base di Visual Programming
  •  
    Conoscenza Informatica >> Programmazione >> Python Programming >> Content
    Che cosa è un Python GIL
    ? Se avete lavorato con Python e vuole iniziare a sperimentare con tecniche di programmazione più avanzate , l'apprendimento su di blocco interprete globale ( GIL ) è una buona idea . GIL è un algoritmo che gestisce l'esecuzione di più thread in un programma Python . GIL è un requisito quando si lavora con più thread , perché la gestione della memoria di CPython non è thread -safe . Inoltre , la GIL è stato conosciuto per degradare una performance programmi . Un esempio è che può richiedere più tempo per i due thread per chiamare la stessa funzione di un thread chiamando la funzione due volte . Utilizzando GIL

    un programma Python multi-threaded di un thread non può accedere in modo sicuro oggetti Python a meno che la GIL è detenuto dal thread corrente . La GIL fa in modo che entrambi i fili siano correttamente l'aggiornamento dei riferimenti agli oggetti di essere chiamati . Per iniziare a utilizzare il GIL è necessario salvare lo stato di filo in una variabile di posizione e rilasciare il blocco interprete globale . A questo punto è possibile eseguire l'operazione di input /output di blocco e riacquisire il blocco interprete globale quando è completo . Infine, ripristinare lo stato filo dalla variabile locale . È possibile utilizzare il seguente esempio di macro per semplificare il processo :

    Py_BEGIN_ALLOW_THREADS ... Fare un po ' di blocco operazione di I /O ... Py_END_ALLOW_THREADS
    Calling Python Codice

    Spesso le discussioni sono creati da altri linguaggi di programmazione come C , e se avete bisogno di chiamare multipla discussioni allora avete bisogno di usare GIL . È necessario registrare questi fili con un interprete attraverso una struttura dati stato del thread e quindi acquisire la GIL . Per semplificare questo processo, è possibile utilizzare la funzione " PyGILState_Release ( ) " " PyGILState_Ensure ( )" e . Il seguente è un esempio su come applicare questo concetto :

    PyGILState_STATE gstate ; gstate = PyGILState_Ensure ( ) ;/* Eseguire azioni Python qui . * /result = CallSomeFunction ( ) ;/* valutare risultato o gestire eccezione * //* Rilasciare il thread. No Python API consentito di là di questo punto . * /PyGILState_Release ( gstate ) ;
    Python Discussioni

    In Python un thread è un vero e proprio thread di sistema come qualsiasi altra esecuzione del programma. Durante l'esecuzione di un thread Python crea una piccola struttura di dati con lo stato interprete . Dopo questo un nuovo thread è lanciato e si chiama " PyEval_CallObject . " L'ultimo passo è una semplice funzione C che corre qualunque Python specificati . La GIL controlla attentamente ogni thread di esecuzione . Il seguente è un esempio di un thread Python :

    import timeimport threadingclass CountdownThread ( threading.Thread ) : def __ init__ (self , count) : threading.Thread.__init__ (auto ) self.count = countdef run (auto ) : mentre self.count > 0 : print " Conto alla rovescia " , self.countself.count - = 1time.sleep ( 5) ritorno
    GIL Problemi e sostituzione
    sviluppatori Python

    hanno discusso l'eliminazione della GIL , ma hanno incontrato alcune difficoltà . Un problema spesso citato con GIL è che impedisce ai programmi multithread CPython da sfruttare appieno i processori multi-core . Eventuale sostituzione GIL deve essere semplice e concorrente quando si lavora con fili . Deve essere più veloce di GIL e deve avere una buona compatibilità API . Un esempio per la compatibilità API è quello di avere un buon tracciamento durante l'enumerazione degli oggetti a cui punta.

    Previous :

    next :
      Articoli Correlati
    ·Come a rispecchiare un immagine verticalmente e orizzon…
    ·Come trasporre una lista di liste in Python 
    ·Come contare su una linea singola in Python 
    ·Come caricare una stringa in un dizionario Python 
    ·Come calcolare l' interpolazione numerica Usare Python 
    ·Come fare Loops in Python 
    ·Come scrivere una serie di Taylor in Python 
    ·Come compilare il codice Python 
    ·Che cosa è Python Hacking 
    ·Come convertire Tipo Array di Float Python 
      Articoli in evidenza
    ·Procedura: Ordinamento dei Verbo nel programma COBOL 
    ·Come passare un ID Sub in PHP 
    ·Tutorial su SQL Funzioni 
    ·Codici PHP nella sintassi di JavaScript 
    ·Come utilizzare VBA per leggere un documento di Microso…
    ·Rimozione di una barra di scorrimento verticale in Java…
    ·Come creare una dichiarazione Mentre in Perl 
    ·Come usare sia SRC e Inline in JavaScript 
    ·Come fare un evento MouseUp in VB6 
    ·Come usare DataGrid per la modifica e cancellazione 
    Copyright © Conoscenza Informatica http://it.wingwit.com