Pagina 1 di 1

[Python] Multithreading o Multiprocessing

MessaggioInviato: 12/08/2019, 11:40
da mic_1
Qualcuno di voi ha mai usato la libreria OPENMP per rendere il codice python da sequenziale a parallelo?

Consigli? Sono alle prime armi...
Ho bisogno di velocizzare i calcoli. Impiega troppo tempo e ho pensato di rendere la parte di codice in cui riporto i dati (calcolati : richiamo delle funzioni esterne alla classe) paralleli per velocizzare.

Grazie

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 12/08/2019, 14:23
da apatriarca
OpenMP è che io sappia disponibile solo in C/C++ e Fortran. In Python puoi usare per esempio la libreria multiprocessing. Se fai uso di numpy, questo dovrebbe poi fare uso automaticamente di più thread per le operazioni.

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 13/08/2019, 08:26
da mic_1
in Python si possono aggiungere script in C/C++ giusto?

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 25/08/2019, 10:20
da mic_1
Con numpy sono riuscita a ridurre il tempo di 30min ma impiega ancora molto: poco meno di un'ora.. mi sembra cmq troppo. Cosa mi consigliate?

Vorrei provare a stampare le colonne della tabella contemporaneamente. Ora da una riga di 6 celle alla volta sono passata a una colonna alla volta e qualcosa risparmio ma è ancora tanto. Grazie!

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 26/08/2019, 15:44
da vict85
Se il tuo codice ci mette 1 ora, allora è probabile che tu debba considerare le seguenti opzioni:
  1. usare un approccio al problema più intelligente;
  2. compilare il tuo programma python (per esempio usando https://pypy.org/ );
  3. riscrivere il tuo programma in un linguaggio compilato come C o C++.

Suggerisco 1 e 2 per incominciare. Se è ancora lento puoi considerare la terza opzione (eventualmente usando OpenMP o altre librerie simili).

Nota però che è meglio non mescolare le operazioni di input e output con quelle di puro calcolo.

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 26/08/2019, 16:43
da mic_1
Ti ringrazio. Io sto usando spyder su Anaconda. Proverò a compilarlo seguendo le tue indicazioni.
Non posso riscriverlo in C/C++ perché dev'essere fatto principalmente in python, nel caso integrato con codice diverso.
Io uso wxpython e non pyqt. Questo potrebbe creare rallentamenti?
In input carico un file che viene elaborato... ma ogni calcolo poi è una funzione a sè richiamata in fase di output su interfaccia. Solo la scrittura su tabella impiega tempo... il resto é tutto abbastanza rapido.

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 27/08/2019, 13:26
da vict85
Cosa fa la tua applicazione? Ho l'impressione che il tuo problema sia di architettura del codice e, forse, di algoritmi. Usare wxpython invece di pyqt non dovrebbe influenzare in maniera determinante le performance.

Re: [Python] Multithreading o Multiprocessing

MessaggioInviato: 29/08/2019, 22:53
da mic_1
Grazie Vic
Ho risolto con apatriarca.
Io chiamavo le funzioni direttamente in stampa su wx.python. Sono bastate delle variabili d'appoggio per rendere tutto più snello.