¿Cómo hago un retraso de tiempo? [duplicar]
¿Cómo pongo un retraso en un script de Python?
Esto se retrasa durante 2,5 segundos:
import time
time.sleep(2.5)
Aquí hay otro ejemplo en el que algo se ejecuta aproximadamente una vez por minuto:
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Uso sleep()
desde el time
módulo. Puede necesitar un argumento flotante para una resolución inferior a un segundo.
from time import sleep
sleep(0.1) # Time in seconds
¿Cómo puedo retrasar el tiempo en Python?
En un solo hilo sugiero la función de suspensión :
>>> from time import sleep
>>> sleep(4)
Esta función en realidad suspende el procesamiento del subproceso en el que es llamado por el sistema operativo, permitiendo que otros subprocesos y procesos se ejecuten mientras está inactivo.
Úselo para ese propósito, o simplemente para retrasar la ejecución de una función. Por ejemplo:
>>> def party_time():
... print('hooray!')
...
>>> sleep(3); party_time()
hooray!
"¡Hurra!" se imprime 3 segundos después de presionar Enter.
Ejemplo de uso sleep
con múltiples subprocesos y procesos
Nuevamente, sleep
suspende su hilo: utiliza una potencia de procesamiento casi nula.
Para demostrarlo, cree un script como este (primero intenté esto en un shell interactivo de Python 3.5, pero los subprocesos no pueden encontrar la party_later
función por algún motivo):
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from time import sleep, time
def party_later(kind='', n=''):
sleep(3)
return kind + n + ' party time!: ' + __name__
def main():
with ProcessPoolExecutor() as proc_executor:
with ThreadPoolExecutor() as thread_executor:
start_time = time()
proc_future1 = proc_executor.submit(party_later, kind='proc', n='1')
proc_future2 = proc_executor.submit(party_later, kind='proc', n='2')
thread_future1 = thread_executor.submit(party_later, kind='thread', n='1')
thread_future2 = thread_executor.submit(party_later, kind='thread', n='2')
for f in as_completed([
proc_future1, proc_future2, thread_future1, thread_future2,]):
print(f.result())
end_time = time()
print('total time to execute four 3-sec functions:', end_time - start_time)
if __name__ == '__main__':
main()
Ejemplo de salida de este script:
thread1 party time!: __main__
thread2 party time!: __main__
proc1 party time!: __mp_main__
proc2 party time!: __mp_main__
total time to execute four 3-sec functions: 3.4519670009613037
subprocesos múltiples
Puede activar una función para que se llame más adelante en un hilo separado con el objeto Timer
de hilo :
>>> from threading import Timer
>>> t = Timer(3, party_time, args=None, kwargs=None)
>>> t.start()
>>>
>>> hooray!
>>>
La línea en blanco ilustra que la función se imprimió en mi salida estándar y tuve que presionar Enterpara asegurarme de que estaba en el mensaje.
La ventaja de este método es que mientras el Timer
hilo esperaba, pude hacer otras cosas, en este caso, presionar Enteruna vez, antes de que se ejecutara la función (consulte el primer mensaje vacío).
No hay un objeto respectivo en la biblioteca de multiprocesamiento . Puedes crear uno, pero probablemente no exista por algún motivo. Un subproceso tiene mucho más sentido para un temporizador simple que un subproceso completamente nuevo.
Los retrasos también se pueden implementar utilizando los siguientes métodos.
El primer método:
import time
time.sleep(5) # Delay for 5 seconds.
El segundo método para retrasar sería utilizar el método de espera implícito:
driver.implicitly_wait(5)
El tercer método es más útil cuando hay que esperar hasta que se complete una acción concreta o hasta que se encuentre un elemento:
self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))