6

È facile creare codice altamente integrato in python, quindi la necessità di chiudere e riavviare un'applicazione quando il suo codice viene modificato è comprensibile.Come scrivere codice Python che può essere auto-aggiornato senza bisogno di uscire dall'applicazione?

Tuttavia, sicuramente devono esistere alcune strategie e modelli per essere in grado di isolare parti del codice in modo che possa essere aggiornato al volo senza la necessità di uscire e riavviare.

Per le applicazioni su cui sto lavorando molte funzioni saranno attività in background indipendenti a cui l'applicazione principale parlerà, presenteranno informazioni sullo stato e istruiranno anche a eseguire attività in base allo stato corrente. In molti modi queste attività in background possono essere viste come programmi indipendenti, solo che condividono parte della base di codice con l'applicazione principale e altri strumenti, attività, ecc.

Anche se probabilmente è difficile rendere l'intera sessione live aggiornabile, sono sicuro che ci devono essere dei modi in cui è possibile distribuire gli aggiornamenti e fare in modo che il codice in esecuzione si noti e si aggiorni secondo necessità.

Dal momento che sono anche appassionato di sfruttare il multithreading e asyncio (in Python 3.5), oltre ad esplorare rendere le cose senza stato, sembra logicamente possibile fare alcune cose interessanti qui che almeno permette di evitare alcuni forzato riavvio forzato durante il lancio di un nuovo codice.

Sarei molto grato per suggerimenti e indicazioni su come farlo funzionare.

+3

Potreste essere interessati a [questa domanda] (https://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module) – CoryKramer

+0

Grazie @CoryKramer, che è esattamente il tipo di informazioni che sto cercando. Brillante, questo potrebbe essere più facile da fare di quanto immaginassi inizialmente :) – tsvenson

+1

Credo che sia la fiaschetta che il tornado abbiano caratteristiche come questa, quindi potresti dare un'occhiata anche al loro codice. – dano

risposta

2

C'è una funzione integrata reload() che ricaricherà un modulo, ma è facile rovinare. Dovresti stare molto attento a ciò che contiene i riferimenti agli oggetti creati dalla vecchia versione del modulo, e quindi assicurati di sostituirli quando ricarichi il modulo.

Uso molto Django e quando esegue il server Web in modalità di debug, ricarica l'intero processo del server Web ogni volta che cambia un file di origine. È un bel compromesso tra un riavvio manuale e il ricaricamento di un singolo modulo.

Non l'ho usato, ma watchdog potrebbe essere utile per monitorare il file system per le modifiche per attivare una ricarica.

Problemi correlati