{"id":21701066,"url":"https://github.com/renatoelho/python-paralelismo","last_synced_at":"2025-03-20T15:44:25.187Z","repository":{"id":226912821,"uuid":"766825756","full_name":"Renatoelho/python-paralelismo","owner":"Renatoelho","description":"O paralelismo no Python é uma técnica que permite a execução de várias tarefas simultaneamente, aumentando a eficiência e a velocidade de processamento. ","archived":false,"fork":false,"pushed_at":"2024-03-24T00:58:25.000Z","size":259,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T15:09:39.228Z","etag":null,"topics":["joblib","paralell","python","python3","threads"],"latest_commit_sha":null,"homepage":"https://youtu.be/C8B8ZLvHUWs","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Renatoelho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-04T07:43:20.000Z","updated_at":"2024-07-19T18:55:31.000Z","dependencies_parsed_at":"2024-03-10T15:28:37.148Z","dependency_job_id":"7ecf2237-040c-4ca2-ab2f-f16ebff55e0a","html_url":"https://github.com/Renatoelho/python-paralelismo","commit_stats":null,"previous_names":["renatoelho/python-paralelismo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Renatoelho%2Fpython-paralelismo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Renatoelho%2Fpython-paralelismo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Renatoelho%2Fpython-paralelismo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Renatoelho%2Fpython-paralelismo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Renatoelho","download_url":"https://codeload.github.com/Renatoelho/python-paralelismo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244645258,"owners_count":20486954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["joblib","paralell","python","python3","threads"],"created_at":"2024-11-25T20:17:54.535Z","updated_at":"2025-03-20T15:44:25.165Z","avatar_url":"https://github.com/Renatoelho.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Paralelismo no Python\n\nO paralelismo no Python é uma técnica que permite a execução de várias tarefas ***simultaneamente***, aumentando a eficiência e a velocidade de processamento. Tarefas intensivas de uso de CPU geralmente não paralelizam de forma eficiente, enquanto tarefas de I/O têm melhor desempenho na paralelização, devido aos momentos de ociosidade da CPU, tornando o processo de paralelização mais efetivo.\n\nNo entanto, é importante observar que o Python tem uma limitação conhecida como Global Interpreter Lock (GIL), que impede várias threads de executar código Python simultaneamente em um único processo.\n\nUma maneira de implementar o paralelismo em Python é utilizando a biblioteca joblib. O joblib fornece ferramentas simples para paralelizar tarefas em Python com facilidade, especialmente para processamento em lote. Com o joblib, é possível paralelizar facilmente um loop ou uma função, distribuindo as iterações ou chamadas de função entre múltiplos núcleos de CPU.\n\n\n# Apresentação em vídeo\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://youtu.be/C8B8ZLvHUWs\" target=\"_blank\"\u003e\u003cimg src=\"thumbnail/Paralelismo-Python.png\" alt=\"Vídeo de apresentação\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n# Código de Implementação\n\n```python\n\n\nfrom joblib import Parallel, delayed\n\n\ndef numero_par(numero: int) -\u003e bool:\n    \"\"\"\n    Esta função, por utilizar a CPU de maneira intensa,\n    não paraleliza de forma eficiente.\n    \"\"\"\n    if numero % 2 == 0:\n        return True\n    else:\n        return False\n\n\ndef consulta_numero(numero: int) -\u003e bool:\n    \"\"\"\n    Esta função, por fazer uso de recursos de I/O, o que por\n    sua vez torna a CPU ociosa por alguns instantes, permite\n    que a paralelização seja mais eficiente.\n    \"\"\"\n    with open(\"./base_consulta.txt\", \"r+\") as arquivo:\n        base_consulta = [int(id.strip(\"\\n\")) for id in arquivo.readlines()]\n    if numero in base_consulta:\n        return True\n    else:\n        return False\n\nlista_numeros = [id for id in range(0, 5_000_000)]\n\n\"\"\"Funções que utilizam intensamente de CPU (Cálculos matemáticos) não paralelizam muito bem.\"\"\"\n\n# Execução em uma única thread\n# resultado = [numero_par(numero) for numero in lista_numeros] \n\n# Execução em multiplas threads\n# resultado = Parallel(n_jobs=10)(delayed(numero_par)(numero) for numero in lista_numeros)\n\n\"\"\"Funções que utilizam de recuros de I/O paralelizam de forma mais eficiente.\"\"\"\n\n# Execução em uma única thread\n#resultado = [consulta_numero(numero) for numero in lista_numeros] \n\n# Execução em multiplas threads\nresultado = Parallel(n_jobs=10)(delayed(consulta_numero)(numero) for numero in lista_numeros)\n\n\nprint(f'A quantidade de itens da lista são: {len(lista_numeros)}')\nprint(f'Os 10 primeiros itens da lista são: {lista_numeros[:10]}...')\nprint(f'O resultado da aplicação da função é: {resultado[:10]}...')\n\n```\n\n\n# Referências:\n\nJoblib: running Python functions as pipeline jobs, ***Joblib***. Disponível em: \u003chttps://joblib.readthedocs.io/en/stable/\u003e. Acesso em: 22 mar. 2024.\n\nGlobal Interpreter Lock - GIL, ***Python***. Disponível em: \u003chttps://wiki.python.org/moin/GlobalInterpreterLock\u003e Acesso em: 22 mar. 2024.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatoelho%2Fpython-paralelismo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenatoelho%2Fpython-paralelismo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatoelho%2Fpython-paralelismo/lists"}