Pybreaker.Implementazione Python del modello di interruttore automatico | |
Scarica ora |
Pybreaker. Classifica e riepilogo
Annuncio pubblicitario
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
PYPARALLELCURL.
Un'interfaccia semplice per la recupero delle risorse URL in parallelo senza fili ...
112
iw.rejectanonymous.
Non consentire l'accesso a una cartella e ai suoi figli se l'utente è anonimo ...
143