O que é Mutithreading em Python e como alcançá-lo?



Aprenda o que é multitarefa em python. Ele também explica multithreading como criar threads sem criar uma classe, estendendo a classe Thread e sem estendê-la.

O tempo é o fator mais crítico da vida. Devido à sua importância, o mundo da programação oferece diversos truques e técnicas que ajudam significativamente a reduzir o consumo de tempo, aumentando assim o desempenho. Uma dessas abordagens é o Multithreading em Python, que é um dos conceitos mais importantes abrangidos pelo .

Aqui está um rápido resumo de todas as especializações abordadas neste artigo:





O que é multitarefa em Python?
O que é um tópico?
O que é multithreading em python?
Quando usar multithreading em Python?
Como conseguir Multithreading em Python?
Como criar threads em Python?

Vantagens de usar multithreading em Python



Para começar, vamos primeiro tentar entender multitarefa antes de começarmos a aprender sobre multithreading em Python.

O que é multitarefa em Python?

Multitarefa, em geral, é a capacidade de realizar várias tarefas simultaneamente. Em termos técnicos, multitarefa se refere à capacidade de um sistema operacional de realizar diferentes tarefas ao mesmo tempo. Por exemplo , você está baixando algo no seu PC, bem como ouvindo músicas e jogando um jogo ao mesmo tempo, etc. Todas essas tarefas são realizadas pelo mesmo sistema operacional e em sincronia. Isso nada mais é do que multitarefa, que não só ajuda a economizar tempo, mas também aumenta a produtividade.

como converter de duplo para int java

Existem dois tipos de multitarefa em um sistema operacional:



  • Baseado em processo
  • Baseado em thread

Neste artigo, você aprenderá sobre Baseado em thread multitarefa ou Multithreading .

O que é um tópico?

threads-multithreading em python-edurekaUm tópico é basicamente um independente fluxo de execução. Um único processo pode consistir em vários threads. Cada thread em um programa executa uma tarefa específica. Por exemplo, quando você está jogando, diga FIFA no PC, o jogo como um todo é um processo único , mas consiste em vários threads responsáveis ​​por tocar a música, receber informações do usuário, executar o oponente de forma síncrona, etc. Todos esses são threads separados responsáveis ​​por realizar essas tarefas diferentes no mesmo programa.

Cada processo tem um thread que está sempre em execução. Este é o tópico principal. Este thread principal realmente cria os objetos do thread filho. O encadeamento filho também é iniciado pelo encadeamento principal. Vou mostrar mais a vocês neste artigo como verificar o tópico em execução atual.

Então, com isso, espero que você tenha entendido claramente o que é um tópico. Continuando, vamos ver o que é multithreading em Python.

Quando usar multithreading em Python?

O multithreading é muito útil para economizar tempo e melhorar o desempenho, mas não pode ser aplicado em todos os lugares.
No exemplo anterior do FIFA, o encadeamento de música é independente do encadeamento que recebe sua entrada e o encadeamento que recebe sua entrada é independente do encadeamento que executa seu oponente. Esses threads são executados independentemente porque não são interdependentes.

Portanto, multithreading pode ser usado somente quando a dependência entre threads individuais não existe.

Este artigo mostra como você pode obter multithreading em Python.

Como conseguir Multithreading em Python?

Multithreading em Python pode ser alcançado importando o enfiar módulo.

Antes de importar este módulo, você terá que instalá-lo. Para instalar isso em seu ambiente anaconda, execute o seguinte comando no prompt do anaconda:

conda install -c conda-forge tbb

Depois de instalado com sucesso, você pode usar qualquer um dos seguintes comandos para importar o módulo de threading:

importar threading de importação de threading *

Agora que você tem o módulo de threading instalado, vamos prosseguir e fazer o multithreading em Python.

Como criar threads em Python?


Threads em Python podem ser criados de três maneiras:

  1. Sem criar uma classe
  2. Ao estender a classe Thread
  3. Sem estender a classe Thread

Sem criar uma classe

Multithreading em Python pode ser realizado sem a criação de uma classe também. Aqui está um exemplo para demonstrar o mesmo:

Exemplo:

from threading import * print (current_thread (). getName ()) def mt (): print ('Thread filho') child = Thread (target = mt) child.start () print ('Executando nome do thread:', current_thread ( ) .getName ())

Resultado:

MainThread Thread filho em execução nome do thread: MainThread

A saída acima mostra que o primeiro thread que está presente é o thread principal. Este thread principal então cria um thread filho que está executando a função e então a instrução de impressão final é executada novamente pelo thread principal.

Agora, vamos seguir em frente e ver como fazer multithreading em python estendendo a classe Thread.

Estendendo a classe Thread:

Quando uma classe filha é criada estendendo a classe Thread, a classe filha representa que um novo thread está executando alguma tarefa. Ao estender a classe Thread, a classe filha pode substituir apenas dois métodos, ou seja, o método __init __ () e o método run (). Nenhum outro método pode ser substituído além desses dois métodos.

Aqui está um exemplo de como estender a classe Thread para criar um thread:

Exemplo:

import threading import time class mythread (threading.Thread): def run (self): para x no intervalo (7): print ('Hi from child') a = mythread () a.start () a.join () print ('Tchau de', current_thread (). GetName ())

Resultado:
Oi de criança
Oi de criança
Oi de criança
Oi de criança
Oi de criança
Oi de criança
Oi de criança
Tchau de MainThread

O exemplo acima mostra que a classe myclass está herdando a classe Thread e a classe filha, ou seja, myclass está substituindo o método run. Por padrão, o primeiro parâmetro de qualquer função de classe precisa ser self, que é o ponteiro para o objeto atual. A saída mostra que o thread filho executa o método run () e o thread principal aguarda a conclusão da execução do filho. Isso ocorre por causa da função join (), que faz o thread principal esperar que o filho termine.

Este método de criação de threads é o método preferido porque é o método padrão. Mas caso você queira criar threads sem herdar ou estender a classe Thread, você pode fazer isso da seguinte maneira.

Sem estender a classe Thread

Para criar um thread sem estender a classe Thread, você pode fazer o seguinte:
Exemplo:

from threading import * class ex: def myfunc (self): #self necessário como primeiro parâmetro em uma classe func para x no intervalo (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('concluído')

Resultado:

Criança
Criança
Criança
Criança
Criança
Criança
Criança
feito

O thread filho executa myfunc após o qual o thread principal executa a última instrução de impressão.

Vantagens de usar rosqueamento

O multithreading tem muitas vantagens, algumas das quais são as seguintes:

  • Melhor utilização de recursos
  • Simplifica o código
  • Permite a ocorrência simultânea e paralela de várias tarefas
  • Reduz o consumo de tempo ou tempo de resposta, aumentando assim o desempenho.

Aqui está um exemplo para verificar quanto tempo leva para um código ser executado com e sem multithreading em python:

 Exemplo: 
tempo de importação def sqr (n): para x em n: time.sleep (1) x% 2 def cubo (n): para x em n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) cubo (n) e = time.time () print (s)

Resultado:

16.042309284210205

O acima é o tempo de saída necessário para executar o programa sem usar threads. Agora, vamos usar threads e ver o que acontece com o mesmo programa:

Exemplo:

importar threading import * importar tempo def sqr (n): para x em n: time.sleep (1) print ('Restante após dividir por 2', x% 2) def cubo (n): para x em n: time.sleep (1) print ('Restante após dividir por 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Tópico ( target = sqr, args = (n,)) t2 = Thread (target = cubo, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () print (end-start)
Resultado: 9.040220737457275

A saída acima mostra claramente que o tempo gasto quando usamos threads é muito menor em comparação com o tempo gasto para o mesmo programa ser executado sem usar threads.

Espero que você tenha entendido bem os conceitos abordados neste artigo relacionados a multithreading em Python. Pratique o máximo possível, pois esse é um dos conceitos mais importantes usados ​​na programação.

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog “Multithreading em Python” e nós vai volte para você o mais rápido possível.

Para obter conhecimento aprofundado sobre Python e seus vários aplicativos, você pode se inscrever para com suporte 24/7 e acesso vitalício.