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 ?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top