Loop de eventos Python

Resumo : neste tutorial, você aprenderá sobre o loop de eventos do Python e como o Python o utiliza para obter o modelo de simultaneidade usando um único thread.

Introdução ao loop de eventos Python

Simultaneidade significa que várias tarefas podem ser executadas ao mesmo tempo. O asynciopacote integrado permite executar tarefas simultaneamente usando um único thread .

Para obter um modelo de simultaneidade de thread único, o asynciopacote usa uma construção chamada loop de eventos. Para entender como funciona o loop de eventos, vamos dar um exemplo de gravação de dados em um arquivo.

Ao gravar dados em um arquivo , você executa as seguintes etapas:

  • Abra o arquivo
  • Grave dados em um arquivo e espere que ele seja concluído
  • Feche o arquivo

Neste fluxo, a segunda tarefa é o bloqueio. Internamente funciona assim:

  • Primeiro, a função, que grava dados no arquivo, envia dados para o sistema operacional (SO).
  • Em segundo lugar, o sistema operacional assume o controle e começa a gravar dados no arquivo.
  • Terceiro, o sistema operacional notifica o programa assim que conclui a gravação do arquivo.

Para gerenciar as notificações, os diferentes sistemas operacionais usam diferentes sistemas de notificação de eventos. Por exemplo:

SO Sistema de notificação de eventos
Linux epoll
janelas Porta de conclusão de E/S (IOCP)
Mac OS kqueue

Esses sistemas de notificação de eventos nos permitem obter simultaneidade usando um único thread . Enquanto o programa espera que o sistema operacional notifique a conclusão, ele pode executar outro código.

No modelo de simultaneidade de thread único, temos apenas um thread executando código Python a qualquer momento. Quando encontramos uma tarefa vinculada a E/S, nós a entregamos ao sistema de notificação de eventos do sistema operacional e executamos outro código.

Quando a tarefa vinculada a E/S for concluída, podemos retomar a tarefa que estava aguardando o resultado e executar o código que segue a tarefa vinculada a E/S.

Para acompanhar as tarefas vinculadas a E/S que estão aguardando resultados, o asynciopacote usa um loop de eventos. A imagem a seguir ilustra como funciona o loop de eventos:

Como funciona.

  • Primeiro, o thread principal envia tarefas para uma fila de tarefas.
  • Em segundo lugar, o loop de eventos monitora constantemente a fila de tarefas e executa a tarefa até contrariar as tarefas de E/S. Nesse caso, o loop de eventos pausa a tarefa e a transfere para o sistema operacional.
  • Terceiro, verifique as tarefas de IO concluídas. Se a tarefa for concluída, o sistema operacional notificará o programa. O loop de eventos executa as tarefas não pausadas.

Essas etapas são repetidas até que a fila de tarefas esteja vazia.

Antes do Python 3.7, você precisava criar um loop de eventos e executar tarefas manualmente. Felizmente, após o Python 3.7, o asynciopacote fornece algumas funções que permitem gerenciar automaticamente o loop de eventos para que você não precise lidar com APIs de baixo nível.

No próximo tutorial, você aprenderá como definir corrotinas usando a asyncpalavra-chave e pausá-las usando a awaitpalavra-chave.

Resumo

  • Simultaneidade significa executar várias tarefas ao mesmo tempo.
  • O loop de eventos é responsável por obter tarefas de uma fila de eventos e tratá-las.
  • O asynciopacote usa um loop de eventos para obter um modelo de simultaneidade de thread único.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *