Pergunta

Existe alguma maneira fácil de fazer 2 métodos, digamos MethodA () e MethodB () executado em 2 núcleos diferentes? Não me refiro a 2 fios diferentes. Estou executando no Windows, mas eu gostaria de saber se é possível ser independente de plataforma.

edit: E o que dizer

http://docs.python.org/dev/library/multiprocessing.html e paralelo python ?

Foi útil?

Solução

Você tem que usar processos separados (por causa do GIL frequentemente mencionados). A multiprocessamento módulo está aqui para ajuda.

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()

Outras dicas

Assumindo que você usar CPython (a implementação de referência) a resposta é NÃO por causa do global Interpreter Bloqueio . Em CPython tópicos são usados ??principalmente quando há muito IO para fazer (um thread espera, outro faz a computação).

Em geral, executando diferentes tópicos é a melhor maneira portátil para rodar em múltiplos núcleos. Claro que, em Python, o bloqueio intérprete mundial torna este um ponto discutível - apenas um segmento vai fazer progressos em um momento

.

Por causa do bloqueio intérprete global, programas Python sempre apenas correr um fio de cada vez. Se você quiser verdadeira multicore de programação Python, você pode olhar para Jython (que tem acesso a tópicos da JVM), ou o brilhante stackless , que tem Go -como canais e tasklets.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top