[Python] Multithreading o Multiprocessing

Messaggioda mic_1 » 12/08/2019, 11:40

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
mic_1
Junior Member
Junior Member
 
Messaggio: 140 di 147
Iscritto il: 11/01/2011, 18:11

Re: [Python] Multithreading o Multiprocessing

Messaggioda apatriarca » 12/08/2019, 14:23

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5282 di 5331
Iscritto il: 08/12/2008, 20:37
Località: Londra

Re: [Python] Multithreading o Multiprocessing

Messaggioda mic_1 » 13/08/2019, 08:26

in Python si possono aggiungere script in C/C++ giusto?
mic_1
Junior Member
Junior Member
 
Messaggio: 141 di 147
Iscritto il: 11/01/2011, 18:11

Re: [Python] Multithreading o Multiprocessing

Messaggioda mic_1 » 25/08/2019, 10:20

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!
mic_1
Junior Member
Junior Member
 
Messaggio: 145 di 147
Iscritto il: 11/01/2011, 18:11

Re: [Python] Multithreading o Multiprocessing

Messaggioda vict85 » 26/08/2019, 15:44

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.
vict85
Moderatore
Moderatore
 
Messaggio: 9786 di 10026
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [Python] Multithreading o Multiprocessing

Messaggioda mic_1 » 26/08/2019, 16:43

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.
mic_1
Junior Member
Junior Member
 
Messaggio: 146 di 147
Iscritto il: 11/01/2011, 18:11

Re: [Python] Multithreading o Multiprocessing

Messaggioda vict85 » 27/08/2019, 13:26

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.
vict85
Moderatore
Moderatore
 
Messaggio: 9789 di 10026
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [Python] Multithreading o Multiprocessing

Messaggioda mic_1 » 29/08/2019, 22:53

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.
mic_1
Junior Member
Junior Member
 
Messaggio: 147 di 147
Iscritto il: 11/01/2011, 18:11


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti