37
globo .com Paralelismo em Python

Paralelismo em Python

Embed Size (px)

DESCRIPTION

Palestra apresentada na PythonBrasil[9], sobre paralelismo em Python.

Citation preview

Page 1: Paralelismo em Python

globo.com Paralelismo em Python

Page 2: Paralelismo em Python

what the f**rancisco?!‣ Globo.com‣ #cobrateam‣ Open Source fanboy

Page 3: Paralelismo em Python

Por que?

Page 4: Paralelismo em Python

The free lunch is over

Page 5: Paralelismo em Python

“Most classes of applications have enjoyed free and regular performance gains for several decades, even without releasing new versions or doing anything special...

- Herb Sutter, 2005 ”

Page 6: Paralelismo em Python

Lei de Moore

Page 7: Paralelismo em Python
Page 8: Paralelismo em Python

Python?

Page 9: Paralelismo em Python

https://secure.flickr.com/photos/infidelic/4306205887/

Global Interpreter Lock

Page 10: Paralelismo em Python

Thread 1

Thread 2

interpreter.lock()interpreter.run(code1)interpreter.unlock()

interpreter.lock()interpreter.run(code2)interpreter.unlock()

Page 11: Paralelismo em Python

Py_BEGIN_ALLOW_THREADSPy_END_ALLOW_THREADS

Page 12: Paralelismo em Python

Py_BEGIN_ALLOW_THREADS/*  danger  zone  */Py_END_ALLOW_THREADS

Page 15: Paralelismo em Python

Multiprocessing

Page 17: Paralelismo em Python

def  sum_values(values,  res_dict,  key):        res_dict[key]  =  sum(values)

if  __name__  ==  "__main__":        result  =  {}        values  =  range(10000)        threads  =  []        per_thread  =  len(values)  /  N_THREADS        for  i  in  range(N_THREADS):                start  =  i  *  per_thread                t  =  threading.Thread(target=sum_values,  args=(values[start:start  +  per_thread],                                                                                                            result,                                                                                                            "t{0:d}".format(i+1)))                t.start()                threads.append(t)        for  t  in  threads:                t.join()

Page 18: Paralelismo em Python

def  sum_values(values,  res_dict,  key):        res_dict[key]  =  sum(values)

if  __name__  ==  "__main__":        result  =  {}        values  =  range(10000)        threads  =  []        per_thread  =  len(values)  /  N_THREADS        for  i  in  range(N_THREADS):                start  =  i  *  per_thread                t  =  threading.Thread(target=sum_values,  args=(values[start:start  +  per_thread],                                                                                                            result,                                                                                                            "t{0:d}".format(i+1)))                t.start()                threads.append(t)        for  t  in  threads:                t.join()

Page 22: Paralelismo em Python

iPython

Page 23: Paralelismo em Python
Page 24: Paralelismo em Python
Page 27: Paralelismo em Python
Page 28: Paralelismo em Python
Page 29: Paralelismo em Python

concurrent.futures

Page 30: Paralelismo em Python
Page 31: Paralelismo em Python

urls  =  ("http://2013.ploneconf.org/",  "http://2013.pythonbrasil.org.br/",  ...)executor  =  concurrent.futures.ThreadPoolExecutor(max_workers=8)futures  =  [executor.submit(load,  url,  60)  for  url  in  urls]for  f  in  concurrent.futures.as_completed(futures):        print(f.result())

Page 32: Paralelismo em Python

urls  =  ("http://2013.ploneconf.org/",  "http://2013.pythonbrasil.org.br/",  ...)executor  =  concurrent.futures.ThreadPoolExecutor(max_workers=8)futures  =  [executor.submit(load,  url,  60)  for  url  in  urls]for  f  in  concurrent.futures.as_completed(futures):        print(f.result())

urls  =  ("http://2013.ploneconf.org/",  "http://2013.pythonbrasil.org.br/",  ...)executor  =  concurrent.futures.ProcessPoolExecutor(max_workers=8)futures  =  [executor.submit(load,  url,  60)  for  url  in  urls]for  f  in  concurrent.futures.as_completed(futures):        print(f.result())

Page 34: Paralelismo em Python

Backport‣ pip install futures

‣ s/concurrent\.futures/futures/

Page 35: Paralelismo em Python

One more thing...

Page 36: Paralelismo em Python

Crie tendência,venha construir ofuturo da internet usando Python.

G1

globoesporte.com

Novelas

Globo.com

Musica.com.br

TechTudo

...

globo.com/talentos

globo.com

Venha trabalharcom a gente

Você cria, 45 milhõesusam diariamente

Page 37: Paralelismo em Python

Paralelismo em Python

Francisco [email protected]@franciscosouzaslideshare.net/franciscosouza

globo.com