Esecuzione di metodi su core diversi su Python
Domanda
Esiste un modo semplice per eseguire 2 metodi, diciamo che MethodA () e MethodB () vengono eseguiti in 2 core diversi? Non intendo 2 diversi thread. Sono in esecuzione su Windows, ma vorrei sapere se è possibile essere indipendenti dalla piattaforma.
modifica: e che dire di
http://docs.python.org/dev/library/multiprocessing.html e parallel python ?
Soluzione
Devi usare processi separati (a causa del GIL spesso citato). Il modulo multiprocessing è qui per aiutarti.
from multiprocessing import Process
from somewhere import A, B
if __name__ == '__main__':
procs = [ Process(target=t) for t in (A,B) ]
for p in procs:
p.start()
for p in procs:
p.join()
Altri suggerimenti
Supponendo che tu usi CPython (l'implementazione di riferimento) la risposta è NO a causa della Blocco dell'interprete globale . In CPython i thread sono usati principalmente quando c'è molto IO da fare (un thread attende, l'altro fa il calcolo).
In generale, eseguire thread diversi è il modo portatile migliore per eseguire su più core. Ovviamente, in Python, il blocco dell'interprete globale lo rende un punto controverso: solo un thread farà progressi alla volta.
A causa del blocco dell'interprete globale, i programmi Python eseguono sempre un solo thread alla volta. Se desideri una vera programmazione Python multicore, puoi esaminare Jython (che ha accesso ai thread della JVM), o il brillante stackless , che ha Vai a canali e tasklet simili a .