Pular para o conteúdo

Como Usar a Função wait no Python?

[

Python sleep(): Como adicionar atrasos de tempo ao seu código

por Mike Driscoll intermediário

Você já precisou fazer seu programa Python aguardar por algo? Na maioria das vezes, você quer que seu código seja executado o mais rápido possível. Mas há momentos em que permitir que seu código durma por um tempo é realmente do seu interesse.

Por exemplo, você pode usar uma chamada Python sleep() para simular um atraso em seu programa. Talvez você precise aguardar o upload ou download de um arquivo, ou o carregamento de uma imagem ou desenho na tela. Você pode até precisar pausar entre chamadas a uma API da web ou entre consultas a um banco de dados. Adicionar chamadas Python sleep() ao seu programa pode ajudar em cada um desses casos e muito mais!

Neste tutorial, você aprenderá como adicionar chamadas Python sleep() com:

  * time.sleep()   * Decorators   * Threads   * Async IO   * Interfaces Gráficas do Usuário

Este artigo destina-se a desenvolvedores intermediários que desejam aprimorar seus conhecimentos em Python. Se você se encaixa nessa descrição, então vamos começar!

Bônus gratuito: Obtenha nosso guia gratuito “O poder dos decoradores em Python” que mostra três padrões avançados de decoradores e técnicas que você pode usar para escrever programas mais limpos e mais pythonicos.

Adicionando uma chamada Python sleep() com time.sleep()

Aqui está um exemplo de como usar o time.sleep():

Python

import time
time.sleep(3) # Dorme por 3 segundos

Se você executar este código no seu console, você deve experimentar um atraso antes de poder inserir uma nova instrução no REPL.

Nota: No Python 3.5, os desenvolvedores principais alteraram ligeiramente o comportamento do time.sleep(). A nova chamada de sistema Python sleep() durará pelo menos o número de segundos que você especificou, mesmo que o sono seja interrompido por um sinal. Isso não se aplica se o próprio sinal levantar uma exceção, no entanto.

Você pode testar quanto tempo o sono dura usando o módulo timeit do Python:

Shell

$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 5: 3 sec por loop

Aqui, você executa o módulo timeit com o parâmetro -n, que indica ao timeit quantas vezes executar a declaração seguinte. Você pode ver que o timeit executou a declaração 3 vezes e que o tempo de execução mais rápido foi de 3 segundos, o que era esperado.

O número padrão de vezes que o timeit executará seu código é um milhão. Se você executar o código acima com o -n padrão, então, a 3 segundos por iteração, seu terminal ficará pendurado por aproximadamente 34 dias! O módulo timeit tem várias outras opções de linha de comando que você pode verificar em sua documentação.

Vamos criar algo um pouco mais realista. Um administrador do sistema precisa saber quando um dos seus sites fica fora do ar. Você deseja ser capaz de verificar regularmente o código de status do website, mas você não quer sobrecarregar o servidor com muitas requisições em um curto período de tempo. Então, você decide adicionar uma chamada time.sleep() antes de fazer outra verificação. Dessa forma, o servidor tem tempo suficiente para se recuperar antes de ser consultado novamente.

Python

import requests
import time
url = "http://www.example.com"
while True:
response = requests.get(url)
if response.status_code == 200:
print("Website is up!")
else:
print("Website is down!")
time.sleep(60) # Espera por 60 segundos antes da próxima verificação

Neste exemplo, você usa o módulo requests para fazer a verificação do status do website e a função time.sleep() para esperar 60 segundos antes de fazer a próxima verificação. Isso ajudará a evitar sobrecarregar o servidor com muitas requisições em um curto período de tempo.

A função time.sleep() não precisa apenas de números inteiros como parâmetros. Você também pode especificar valores decimais para pausas mais precisas:

Python

import time
time.sleep(2.5) # Dorme por 2,5 segundos

Neste exemplo, o código dorme por 2,5 segundos antes de continuar.

Agora que você conhece a função time.sleep(), vamos ver como podemos adicionar atrasos usando decoradores Python.