SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Python Brasil [5]




Modelo de Programação com Threads e
  Transações Implícitas em Python


            Rodrigo Hübner
Conteúdo
●   Introdução
●   Motivação
●   Programação paralela implícita
●   Algumas estratégias já utilizadas
●   Principais módulos para programação
       paralela em Python
●   Estratégia proposta para Python
●   A expansão (Pré-processamento)
●   Conclusões e trabalhos futuros
Introdução

Nos modelos atuais, o programador deve solicitar a criação 
de unidades paralelas explicitamente.
Tais modelos tornam a programação complexa para:
   Criar
   Gerenciar
   Explorar a arquitetura


    A proposta é criar unidades paralelas de forma implícita.
Motivação



   Facilitar a construção de programas paralelos;
   Explorar programação paralela em alguma linguagem;
   Expandir uma linguagem de programação baseado em 
    modelos multi­thread já existentes;
   Aplicar estratégias existentes e buscar novas idéias
Modificar um compilador/interpretador
             já existente

Qualquer resultado positivo é válido e inquestionável.


Contras:
   Difícil implementação para linguagens já existentes;
   Resultados demoram;
   Não existe linguagens que implentam unidades paralelas 
    de forma implícita para tomar base.
Programação paralela em Python

Bibliotecas tradicionais:
   threading
   multiprocessing


Com mecanismos para SMP e Clusters
   PP – Parallel Python
Python - threading



       Método mais utilizado até o momento;
       É um módulo completo, mas possuem problemas de 
        desempenho...;
       Threads utilizam o mesmo espaço de endereçamento;
               Soluções: uso de locks...


       GIL ­ Global Interpreter Lock
Python – threading. Exemplo de código

from threading import Thread  
def func(arg):  
    print(arg)
   
th = Thread(target=func, args=('executando thread', ) )  
th.start()
th.join()
Python - multiprocessing



   É similar ao módulo threading;
   Oferece paralelismo local e remoto;
   Evita problemas com o GIL usando subprocessos em vez 
    de threads;
   Shared memory e objetos ctypes compartilhados
   Managers
   Queues, Pipes...
Python – threading. Exemplo de código

from multiprocessing import Process  
def func(arg):  
    print(arg)
   
p = Process(target=func, args=('executando subprocesso', ) )  
p.start()
p.join()
Python – threading. Exemplo de código


Além disso...


from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)
    result = pool.apply_async(f, [10]) 
    print(pool.map(f, range(10)))
Novo módulo em Python baseado na
              API OpenMP

   API para programação paralela baseada em multi­
    processamento, para linguagens C, C++ e Fortran;
   Base inicial para a construção de um módulo em Python:
Exemplos:
                                        int main(int argc, char **argv) {
                                           const int N = 100000;
     int main(int argc, char* argv[])      int i, a[N];
     {
       #pragma omp parallel                 #pragma omp parallel for
       printf("Hello, world.n");           for (i = 0; i < N; i++)
       return 0;                               a[i] = 2 * i;
     }
                                            return 0;
                                        }
Estratégias para a criação do módulo
              em Python


from multiprocessing import Pool
@Pool(5, 'apply')
def func()
    …


   Depende de parâmetros
   >>> Criar um módulo que possa enviar parâmetros através 
    de chamadas da função decorada
Estratégias para a criação do módulo
              em Python

        multiprocessing + @decorator = @task


@task
def soma_primos(n):
     …


soma_primos(1000)


Outros módulos: inspect, atexit, …
Python – decorators

class decorador(object):
    
    def __init(self, func):
        self.func = func
    
    def __call__(self, *args, **kargs):
        self.func(*args, **kargs)


@decorador
def foo(arg):
    print(arg)

foo()
@task: Funcionamento usando 2 cpu
@task: Exemplo de código

    for m2ti import task

    @task
    def fibonacci(n):
        a, b = 0, 1
        for i in range(n)
            a, b = b, a+b
        return a

    for i in range(1000):
        fibonacci(i)
@task: Acrescentando init e final

    @init decora uma tarefa que será executada antes de 
      todos os trabalhadores;
          Permite preparar objetos que serão utilizados 


             pelas tarefas. Ex: Construção de uma matriz


    @final decora uma tarefa que será executada depois 
      que todos os trabalhadores terminarem suas 
      execuções;
          Imprimir resultados, especificar outro conjunto 


             de tarefas, etc.
@task: Acrescentando init e final.
         Exemplo de código


from m2ti import task, init, final   @final
                                     def ultima():
@init                                    ...
def primeira():
    …
                                     for n in range(100):
@task                                    func(arg)
def func(arg):
    ...
@task: Funcionamento usando 2 cpu
       com roubo de tarefas
@task(n): Exemplo de código



from m2ti import task_cilk   bar(10)
                             ...
@task(1)                     bar(100)
def foo(arg):                …
    ...
                             for n in range(100):
@task(2)                         foo(n)
def bar(arg):
    …
    foo(10)
    ...
Pré-processamento do código fonte



   Possibilidade de acrescentar novas idéias;
   Permite inserir melhor o código depois de pré­processar;
   É possível explorar melhor as funcionalidades da 
    linguagem e suas bibliotecas...
Pré-processamento - exclusive

Transformação simples a partir de locks

                         exclusive:
                             a += 1



                import multiprocessing
                ...
                lock = multiprocessing.Lock()
                lock.acquire()
                a += 1
                lock.release()
Explicit is better than implicit.
Pré-processamento - barrier

Implementação de sincronização através de barreiras
   Eventos e trabalhadores ativos estariam implícitos
   Não existe implementação de barreira no módulo 
    multiprocessing;
Exemplo:
                     …
                     @task
                     def func(arg):
                       …
                       barrier
                       ...
Pré-processamento - atomic

Implementação de transações implícitas:
   Modo mais seguro de manipular objetos compartilhados;


Projetos existentes:
   Kamaelia ­ http://www.kamaelia.org/STM
   Durus ­ http://www.mems­exchange.org/software/durus/;
Pré-processamento - atomic

   Adapatar para funcionar junto ao módulo multiprocessing
   Deixar com uma sintaxe mais pythonica :)


Exemplo:                   def foo():
                             …

                           def bar():
                             …

                           atomic:
                               a = foo()
                               b = bar()
                               c=a+b
                           ...
Conclusões e Trabalhos Futuros

   Existem muitas limitações;
   Resultados bons para alguns casos;


   Verificar agora o que é mais importante;
   Módulo ou pré­processamento?
   Outras idéias?
@final



Perguntas?


             Rodrigo Hübner
             e-mail:
             rhubner@gmail.com

Contenu connexe

Tendances

Principais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaPrincipais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaIntel Software Brasil
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowGuilherme Campos
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonguestac3de
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiaTDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiatdc-globalcode
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 

Tendances (20)

Principais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaPrincipais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralela
 
Workshop Python.2
Workshop Python.2Workshop Python.2
Workshop Python.2
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlow
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Pged 02
Pged 02Pged 02
Pged 02
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiaTDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 

En vedette

Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosbshecht
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefastarcisioti
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14Leandro Almeida
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronFrederico Madeira
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...Dafmet Ufpel
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Bruno Abinader
 
Python-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonPython-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonBruno Abinader
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013Arthur Francisco Lorenzon
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processosAnderson Lago
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à ShellscriptVinícius Hax
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDAFilipo Mór
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonRelsi Maron
 

En vedette (20)

Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticos
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Aula CRONTAB
Aula CRONTABAula CRONTAB
Aula CRONTAB
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefas
 
OpenMP Day 2
OpenMP Day 2OpenMP Day 2
OpenMP Day 2
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o Cron
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
Python-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonPython-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o Cython
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
Grupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares LivresGrupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares Livres
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 

Similaire à M2ti - Python Brasil

Similaire à M2ti - Python Brasil (20)

Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Aula python
Aula pythonAula python
Aula python
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Threads
ThreadsThreads
Threads
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Python ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowPython ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao Tensorflow
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Parte1c
Parte1cParte1c
Parte1c
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Funções em C
Funções em CFunções em C
Funções em C
 
Ud2
Ud2Ud2
Ud2
 

M2ti - Python Brasil

  • 1. Python Brasil [5] Modelo de Programação com Threads e Transações Implícitas em Python Rodrigo Hübner
  • 2. Conteúdo ● Introdução ● Motivação ● Programação paralela implícita ● Algumas estratégias já utilizadas ● Principais módulos para programação paralela em Python ● Estratégia proposta para Python ● A expansão (Pré-processamento) ● Conclusões e trabalhos futuros
  • 4. Motivação  Facilitar a construção de programas paralelos;  Explorar programação paralela em alguma linguagem;  Expandir uma linguagem de programação baseado em  modelos multi­thread já existentes;  Aplicar estratégias existentes e buscar novas idéias
  • 5. Modificar um compilador/interpretador já existente Qualquer resultado positivo é válido e inquestionável. Contras:  Difícil implementação para linguagens já existentes;  Resultados demoram;  Não existe linguagens que implentam unidades paralelas  de forma implícita para tomar base.
  • 6. Programação paralela em Python Bibliotecas tradicionais:  threading  multiprocessing Com mecanismos para SMP e Clusters  PP – Parallel Python
  • 7. Python - threading  Método mais utilizado até o momento;  É um módulo completo, mas possuem problemas de  desempenho...;  Threads utilizam o mesmo espaço de endereçamento;  Soluções: uso de locks...  GIL ­ Global Interpreter Lock
  • 8. Python – threading. Exemplo de código from threading import Thread   def func(arg):       print(arg)     th = Thread(target=func, args=('executando thread', ) )   th.start() th.join()
  • 9. Python - multiprocessing  É similar ao módulo threading;  Oferece paralelismo local e remoto;  Evita problemas com o GIL usando subprocessos em vez  de threads;  Shared memory e objetos ctypes compartilhados  Managers  Queues, Pipes...
  • 10. Python – threading. Exemplo de código from multiprocessing import Process   def func(arg):       print(arg)     p = Process(target=func, args=('executando subprocesso', ) )   p.start() p.join()
  • 11. Python – threading. Exemplo de código Além disso... from multiprocessing import Pool def f(x):     return x*x if __name__ == '__main__':     pool = Pool(processes=4)     result = pool.apply_async(f, [10])      print(pool.map(f, range(10)))
  • 12. Novo módulo em Python baseado na API OpenMP  API para programação paralela baseada em multi­ processamento, para linguagens C, C++ e Fortran;  Base inicial para a construção de um módulo em Python: Exemplos: int main(int argc, char **argv) { const int N = 100000; int main(int argc, char* argv[]) int i, a[N]; { #pragma omp parallel #pragma omp parallel for printf("Hello, world.n"); for (i = 0; i < N; i++) return 0; a[i] = 2 * i; } return 0; }
  • 13. Estratégias para a criação do módulo em Python from multiprocessing import Pool @Pool(5, 'apply') def func()     …  Depende de parâmetros  >>> Criar um módulo que possa enviar parâmetros através  de chamadas da função decorada
  • 14. Estratégias para a criação do módulo em Python multiprocessing + @decorator = @task @task def soma_primos(n):      … soma_primos(1000) Outros módulos: inspect, atexit, …
  • 17. @task: Exemplo de código for m2ti import task @task def fibonacci(n):     a, b = 0, 1     for i in range(n)         a, b = b, a+b     return a for i in range(1000):     fibonacci(i)
  • 18. @task: Acrescentando init e final  @init decora uma tarefa que será executada antes de  todos os trabalhadores;  Permite preparar objetos que serão utilizados  pelas tarefas. Ex: Construção de uma matriz  @final decora uma tarefa que será executada depois  que todos os trabalhadores terminarem suas  execuções;  Imprimir resultados, especificar outro conjunto  de tarefas, etc.
  • 19. @task: Acrescentando init e final. Exemplo de código from m2ti import task, init, final @final def ultima(): @init     ... def primeira():     … for n in range(100): @task     func(arg) def func(arg):     ...
  • 20. @task: Funcionamento usando 2 cpu com roubo de tarefas
  • 21. @task(n): Exemplo de código from m2ti import task_cilk bar(10) ... @task(1) bar(100) def foo(arg): …     ... for n in range(100): @task(2)     foo(n) def bar(arg):     …     foo(10)     ...
  • 22. Pré-processamento do código fonte  Possibilidade de acrescentar novas idéias;  Permite inserir melhor o código depois de pré­processar;  É possível explorar melhor as funcionalidades da  linguagem e suas bibliotecas...
  • 23. Pré-processamento - exclusive Transformação simples a partir de locks exclusive: a += 1 import multiprocessing ... lock = multiprocessing.Lock() lock.acquire() a += 1 lock.release()
  • 24. Explicit is better than implicit.
  • 25. Pré-processamento - barrier Implementação de sincronização através de barreiras  Eventos e trabalhadores ativos estariam implícitos  Não existe implementação de barreira no módulo  multiprocessing; Exemplo: … @task def func(arg): … barrier ...
  • 26. Pré-processamento - atomic Implementação de transações implícitas:  Modo mais seguro de manipular objetos compartilhados; Projetos existentes:  Kamaelia ­ http://www.kamaelia.org/STM  Durus ­ http://www.mems­exchange.org/software/durus/;
  • 27. Pré-processamento - atomic  Adapatar para funcionar junto ao módulo multiprocessing  Deixar com uma sintaxe mais pythonica :) Exemplo: def foo(): … def bar(): … atomic: a = foo() b = bar() c=a+b ...
  • 28. Conclusões e Trabalhos Futuros  Existem muitas limitações;  Resultados bons para alguns casos;  Verificar agora o que é mais importante;  Módulo ou pré­processamento?  Outras idéias?
  • 29. @final Perguntas? Rodrigo Hübner e-mail: rhubner@gmail.com