Abordando multithreading e multiprocessing de maneiras transparentes e Pythonic
[EuroPython 2018 - Palestra - 2018-07-27 - PyCharm [PyData]]
[Edimburgo, Reino Unido]
Por David Liu
Com o aumento do poder computacional, aproveitar e controlar o código fora do reino de thread única se torna um problema cada vez maior, juntamente com o desejo de permanecer na camada Python. Com as ferramentas e frameworks recentes que foram publicados, escapar do GIL de forma limpa é muito mais fácil do que antes, permitindo que o código Python utilize efetivamente arquiteturas de múltiplos núcleos e muitos núcleos da maneira mais Pythonic possível. Nesta palestra, aprenda como utilizar multiprocessing estático para fixação de processos e equilibrar efetivamente pools de threads com uma importação monkey-patch dos módulos de threading.
Visão geral:
Introdução ao multithreading e multiprocessing em Python
História do multithreading+multiprocessing em Python, frameworks clássicos
Problemas que podem ocorrer (sobrescrição, problemas de paralelismo aninhado, troca de processos, recursos de pool em máquinas compartilhadas)
Python acessando hardware maior nos últimos anos (28+ núcleos, etc)
Quando permanecer no GIL e quando escapar dele
As vantagens e a segurança do GIL
Saída do GIL em nível Python; análise de quando retornar ao thread único e quando threading é uma ideia enganosa
Responsabilidade dos frameworks que saem nativamente do GIL
As novas bibliotecas e técnicas de multithreading e multiprocessing
módulo de multiprocessing estático (smp) (e monkey patching de multiprocessing)
controle de pool de threads com chamadas de linha de comando do Python (python -m tbb -p 8)
Colocando tudo junto
Exemplos de uso de multiprocessing estático em uma máquina grande para parar a sobrescrição
Exemplo de processo pseudo-daemon em uma máquina de 4 núcleos por fixação de processador
Controle de pool de threads em um exemplo simples de NumPy
Resumo - Melhores práticas para usar os métodos acima para controlar multithreading+multiprocessing
O que precisa ser feito na área (frameworks e coisas que precisam ser expostas)
Problemas que ainda existem na área
Q&A