Ho bisogno di qualche consiglio sulla mia idea di scrivere un file controller in Python, e non come il controller di tipo C in MVC ma un'idea più semplice. Solo uno script Python che controlla l'operazione di alcuni altri script Python.
Descriverò l'idea e qualsiasi consiglio o idea sarebbe molto apprezzata.
Devo scrivere un sistema che faccia alcune attività in background per un'applicazione web. L'app Web è in PHP e separata dal sistema Python che sto scrivendo, Python eseguirà alcune attività automatiche e calcolerà e salverà alcuni dati analitici per l'app Web da utilizzare e visualizzare.
Ho esperienza con Python base ma non ho spinto in avanti per imparare molto su Python di classe / obiettivo. Finora quello che ho scritto per il sistema è un mucchio di script py separati che fanno i lavori che devono fare, scritti in modo totalmente procedurale. Funzionano tutti bene, ma non è ancora un sistema. Il mio krux iniziale era che dovevo tenerli tutti vivi e correre all'infinito sullo sfondo. Dopo alcune ricerche ho deciso che il modo migliore per farlo era avere un manager dei processi come Supervisord che si occupasse di ogni script, io avvii gli script e permetto loro di girare per un certo tempo con un ciclo finito (in ogni script) e poi uscivano, quindi il supervisore li riavviava ogni volta che uscivano e li tenevano in vita. Volevo evitare l'uso di loop infiniti a causa della possibilità di perdite di memoria (credo che consentire l'uscita del processo libera completamente la memoria associata a quel processo e prevenga le perdite). Non ho provato nulla di tutto ciò, è solo un concetto al momento.
Qualcosa che preferirei fare sarebbe avere uno script come controller del resto degli script e fare in modo che il supervisore si occupi solo del controller. Questo mi evita di dover aggiornare il file di configurazione dei supervisori ogni volta che aggiungo al sistema Python.
L'idea di base per il controller sarebbe quella di avere un loop fork di nuovi thread per ogni script / processo separato e quindi fare in modo che il controller attenda che tutti gli altri thread siano completati prima di consentire al ciclo di eseguire un'altra iterazione (riavviando tutto di nuovo) .
Immagino che quello che devo fare per questo sarebbe quello di avvolgere tutto il codice in ogni script in una funzione, quindi importarli come moduli nel controller e chiamare ogni funzione su un nuovo thread all'interno del ciclo 'principale' del controller. Quindi il ciclo viene eseguito, chiama ogni funzione su un nuovo thread e attende che ogni thread finisca prima di ricominciare.
Come suona come un concetto?
L'unica domanda di codifica diretta che ho è di trasformare i miei script in moduli, come posso passare da un codice totalmente procedurale (senza funzioni, senza classi) in un modulo importabile? posso avvolgere le procedure solo in una funzione o devo anche averle in una classe?