Pular para o conteúdo

Como usar a função 'wait' em Python?

CodeMDD.io

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

por Mike Driscoll intermediário

Você já precisou fazer com que seu programa Python espere por algo? Na maioria das vezes, você quer que seu código seja executado o mais rápido possível. Mas existem momentos em que deixar seu código dormir por um tempo pode ser vantajoso.

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

  • time.sleep()
  • Decoradores
  • Threads
  • Async IO
  • Interfaces Gráficas do Usuário

Este artigo destina-se a desenvolvedores intermediários que desejam ampliar seu conhecimento em Python. Se você se enquadra nessa descrição, vamos começar!

Bônus Grátis: 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 com mais estilo em Python.

Adicionando uma chamada sleep() em Python 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, deverá experimentar um atraso antes de poder digitar um novo comando no REPL.

Observação: No Python 3.5, os desenvolvedores principais alteraram ligeiramente o comportamento do time.sleep(). A nova chamada do sistema sleep() em Python durará pelo menos o número de segundos especificado, mesmo se o sono for interrompido por um sinal. Isso não se aplica se o sinal em si lançar uma exceção, no entanto.

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

Shell

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

Aqui, você executa o módulo timeit com o parâmetro -n, que informa ao timeit quantas vezes ele deve executar a instrução que vem a seguir. Você pode ver que o timeit executou a instrução 3 vezes e que o melhor tempo de execução foi de 3 segundos, como o esperado.

O número padrão de vezes que o timeit executará seu código é um milhão. Se você executasse o código acima com o -n padrão, em 3 segundos por iteração, seu terminal ficaria 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](https:https://codemdd.io/docs.python.orghttps://codemdd.io/3https://codemdd.io/libraryhttps://codemdd.io/timeit.html#timeit-command- line-interface).

Vamos criar algo um pouco mais realista. Um administrador do sistema precisa saber quando um de seus websites fica offline. Você quer ser capaz de verificar o código de status do website regularmente, mas não quer sobrecarregar o servidor com muitas requisições. Neste caso, seria útil adicionar uma pausa entre cada requisição. Veja como isso pode ser feito:

Python

import requests
import time
urls = ["https:https://codemdd.io/www.site1.com", "https:https://codemdd.io/www.site2.com", "https:https://codemdd.io/www.site3.com"]
for url in urls:
response = requests.get(url)
if response.status_code != 200:
print(f"Error accessing {url}. Status code: {response.status_code}")
time.sleep(5) # Pausa de 5 segundos entre cada requisição

Neste exemplo, estamos fazendo requisições a três URLs diferentes e verificando o código de status da resposta. Se o código de status for diferente de 200, imprimimos uma mensagem de erro. Em seguida, adicionamos uma pausa de 5 segundos entre cada requisição usando a função sleep() do módulo time.

Essa pausa pode ser útil para garantir que sua aplicação não envie muitas requisições de uma só vez, evitando possíveis sobrecargas e sobrecarregando o servidor.

Adicionando uma chamada sleep() em Python com Decoradores

Outra maneira de adicionar atrasos de tempo ao seu código Python é usando decoradores. Os decoradores são funções especiais que envolvem outras funções para modificar ou estender seu comportamento.

Aqui está um exemplo de como usar um decorador para adicionar um atraso ao seu código utilizando a função sleep():

Python

import time
def sleep_decorator(sleep_seconds):
def decorator(func):
def wrapper(*args, **kwargs):
time.sleep(sleep_seconds)
return func(*args, **kwargs)
return wrapper
return decorator
@sleep_decorator(5) # Adiciona um atraso de 5 segundos
def print_message(message):
print(message)
print_message("Hello, world!")

Neste exemplo, definimos um decorador chamado sleep_decorator que recebe o número de segundos de atraso como argumento. Ele retorna uma função interna, decorator, que, por sua vez, retorna outra função , wrapper. A função interna wrapper adiciona um atraso de tempo de sleep_seconds segundos e depois chama a função original passada para o decorador. O decorador é usado antes da definição da função print_message, onde especificamos o número de segundos de atraso desejado.

Quando chamamos a função print_message, ocorre um atraso de 5 segundos antes que a mensa