Sto iniziando a delineare la struttura di un sito di servizio di informazioni quantitative-finance scritto in Python (3.x spero) e sono giunto alla conclusione - correggimi se io ' m sbagliato - che dovrò utilizzare sia la libreria di rete dell'eventolet e la libreria di multiprocessing.domande multithreading e multiprocessing per il sito quant
Una parte del sistema è fondamentalmente un lavoro cron eseguito in background, che esamina il mercato azionario e altri dati finanziari dopo la chiusura del mercato, esegue l'apprendimento automatico e calcoli quant, quindi inserisce le previsioni in un semplice database o forse anche in un file delimitato da virgola piatta. (Gli argomenti vengono quindi passati tra le sezioni del sistema tramite file.)
Comprendo che l'eventlet può essere utilizzato per l'I/O non bloccante in modo che una bella zuppa o scrapy possa racchiudere le informazioni da molti siti contemporaneamente (sorta di) e la libreria di multiprocessing può consentire agli algoritmi di apprendimento automatico/quantizzazione di eseguire i calcoli su tutti i dati di magazzino in parallelo come processi separati.
Per visualizzare le previsioni, gli utenti accedono all'altra parte del sistema creata con Flask che accede al database e visualizza le previsioni.
Suppongo che tutte queste routine di librerie e di thread combinati/multiprocessing si accompagnino l'una con l'altra? Userò pythonanywhere.com come host e sembra che abbiano un bel po 'di "batterie incluse". Naturalmente, quando il test sarà terminato, probabilmente dovrò aggiornare il numero di "lavoratori" per alimentare il sito finale distribuito.
Eventuali insidie nel mixare thread e multiprocessing in qualcosa di così complicato?
non può rispondere alla tua domanda conclusivamente come non ho provato esattamente, ma in generale è bene avere più thread e processi multipli. – 101
Non sono sicuro di quanto strettamente * gevent * sia correlato a * eventlet *, ma per supportare il multiprocessing da * gevent * quando i thread sono rattoppati, ho dovuto usare il * subprocess * per la comunicazione e * pickle * per serializzazione perché il multiprocessing non è supportato da * gevent *. – cpburnz
PythonAnywhere dev. Qui. Una delle cose che devi sapere su PythonAnywhere è che limitiamo i thread e i processi che gli utenti possono avviare, quindi probabilmente avrai bisogno di usare un pool thread/process. Credo che il multiprocessing lo abbia integrato. – Glenn