Pybreaker.

Implementazione Python del modello di interruttore automatico
Scarica ora

Pybreaker. Classifica e riepilogo

Annuncio pubblicitario

  • Rating:
  • Licenza:
  • BSD License
  • Nome editore:
  • Daniel Fernandes Martins
  • Sito web dell'editore:

Pybreaker. Tag


Pybreaker. Descrizione

Implementazione Python del modello di interruttore automatico Pybreaker è un'implementazione Python del pattern di interruttore del circuito, descritto nel libro di Michael T. Nygard il rilascio! .In le parole di Nygard, "esistono interruttori automatici per consentire a un sottosistema di fallire senza distruggere l'intero sistema. Questo è fatto avvolgendo le operazioni pericolose ( Tipicamente punti di integrazione) con un componente che può eludere le chiamate quando il sistema non è in buona salute ".installationRun la seguente riga di comando per scaricare l'ultima versione stabile di Pybreaker da Pypi: Easy_install -u Pybreakebreaker è un utente Git, potresti voler scaricare La versione in corso di sviluppo: Git clone git: //github.com/danielfm/pybreaker.git cd Pybreaker Python Setup.py test Python Setup.py InstallSagethe Primo passo è creare un'istanza di circuito per ogni punto di integrazione: importazione PybreakerDb_breaker = Pybreaker .Circuitbreaker () per consentire una migliore personalizzazione mantenendo il codice autonomo, si consiglia di creare sottoclassi di circuito per ogni tipo di integrati Sul punto: importazione PybreakerClass DBCIRCIRCIRCIRCIRUCKERBRESS (PYBreaker.CirCuitbreaker): DEF On_State_Change (Self, Old_State, New_State): "Chiamato quando lo stato dell'interruttore automatico cambia". Pass DEF on_Failure (Self, Exc): "Chiamato quando un'invocazione della funzione solleva un errore di sistema." Pass DEF on_success (auto): "Chiamato quando un'invocazione della funzione ha esito positivo." passdb_breaker = dbcircuitbreaker () Questi oggetti dovrebbero vivere a livello globale all'interno dell'applicazione Scope.Nota: I punti di integrazione a servizi esterni (IE database, code, ecc.) sono più propensi a fallire, quindi assicurati di utilizzare sempre i timeout durante l'accesso a tali servizi se c'è supporto A livello API. Come si prega di utilizzare un interruttore automatico su una funzione che aggiorna una riga nella tabella del database dei clienti: @db_breakerdef update_customer (Custodia): # DOFFETTE QUI ... PASS # Attiva il circuito BREAKERUPDATED_CUSTOMER = UPDATE_CUSTOMER (my_customer) o se non si desidera utilizzare la sintassi del decoratore: def update_customer (Cust): # DOFFETTE qui ... Pass # attiverà il circuito breakerUpdated_customer = db_breaker.call (update_customer, my_customer) Cosa fa un interruttore automatico Fare? Secondo i parametri predefiniti, l'interruttore automatico DB_breaker aprirà automaticamente il circuito dopo 5 guasti consecutivi in update_customer. Quando il circuito è aperto, tutte le chiamate a Update_Customer non riusciranno a fallire Diately (sollevamento circuitobreakerError) senza alcun tentativo di eseguire l'operazione reale. Dopo 60 secondi, l'interruttore automatico consentirà la chiamata successiva a AGGIORNAMENTO ADJUTED_CUSTOMER passando attraverso. Se quella chiamata riesce, il circuito è chiuso; Se fallisce, tuttavia, il circuito viene aperto di nuovo fino ad oggi passare a un altro timeout.Excluding ExceptionsBa default, una chiamata fallita è una chiamata che solleva un'eccezione. Tuttavia, è comune raccogliere le eccezioni per indicare anche le eccezioni aziendali, e tali eccezioni devono essere ignorate dall'interruttore automatico poiché non indicano errori di sistema: # alla creazione Timedb_breaker = DbCitCirInkbreaker (esclude = (CustomerValidationError,)) # in un secondo momento Timedb_breaker.excluded_exceptions + = (CustomerValidationError,) In questo caso, quando qualsiasi funzione sorvegliata da quell'interruttore automatico solleva CustomerValidationError (o qualsiasi eccezione derivata da CustomerValidationError), tale chiamata non sarà considerata un errore di sistema.Monitoring e Management Handaker Object fornisce proprietà È possibile utilizzare per monitorare e modificare il suo stato corrente: # Ottieni il numero corrente di fallimenti consecutiviPrint db_breaker.fail_counter # Get / Imposta il numero massimo di fallimenti consecutiviPrint db_breaker.fail_maxdb_breaker.fail_max = 10 # Get / Imposta il periodo di timeout di ripristino corrente (in secondi) Stampa db_breaker.reset_timeoutdb_breaker.reset_timeout = 60 # Ottieni lo stato corrente, cioè "aperto", 'mezzo-aperto' "Closed'Print db_breaker.current_state # chiude il circuitoDB_breaker.Close () # Half-apre il circuitoDB_breaker.half_open () # Apre il circuitoDB_breaker.Open () Quindi, se si dispone di un'applicazione Web utilizzando i punti di integrazione, tu può facilmente scrivere una semplice API riposante per esporre queste funzioni per il personale delle operazioni.


Pybreaker. Software correlato