Sto sviluppando un progetto Django che fondamentalmente si riduce a:
- Un utente invia un modulo.
- La vista Django analizza il modulo e compila una rappresentazione di quella forma che è leggibile da qualche altra 'funzione'. Per "funzione", intendo un qualche tipo di eseguibile / chiamabile in cui la vista di Django può essere agnostica su quale lingua sia stata scritta la "funzione" o anche su quale hardware viene eseguito.
- La vista Django passa il modulo compilato nella 'funzione'.
- La "funzione" svolge la propria attività sull'input, quindi restituisce alcuni dati in un formato leggibile dalla vista Django.
- La vista Django legge l'output della 'funzione' e rende i dati in un formato che è consumabile dall'utente.
Nel mio caso specifico, la 'funzione' è un grande calcolo numerico non adatto per plain-vanilla Python. Inoltre, questa 'funzione' è già stata sviluppata in C ++ 11 e Python può dialogare con il binario compilato via os.system e file IO.
La mia domanda è: perché non dovrei usare solo os.system o sottoprocesso dalla vista Django piuttosto che
a) ridisegna la 'funzione' usando uno dei tipi | sorso | Boost.Python | pyrex | Cython ;
b) scopri come scrivere estensioni Python e riscrivere la "funzione" di conseguenza ?
Ho anche pensato di trasformare la 'funzione' in un daemon, ma non ho abbastanza esperienza con i daemon per poter valutare quali sarebbero le conseguenze di un tale progetto.
Ci sono comportamenti indesiderati / non definiti che potrebbero derivare dall'uso di os.system / sottoprocesso come descritto sopra per un progetto Django che stava funzionando sotto carico?
C'è qualcos'altro che mi manca è super ovvio per tutti gli altri?
C'è anche questa domanda correlata . Ma con la scarsità di dettagli sia nel caso d'uso dell'OP che nelle risposte, sono prudente a non cadere per il mio fallace bias di conferma.