Soy algo nuevo en Python. He buscado pero no puedo encontrar una respuesta que se ajuste exactamente a lo que estoy buscando.
Tengo una función que realiza una llamada HTTP utilizando el paquete de solicitudes. Me gustaría imprimir un '.' a la pantalla (o cualquier carácter) diga cada 10 segundos mientras se ejecutan las solicitudes HTTP, y deja de imprimir cuando finaliza. Entonces algo como:
def make_call: rsp = requests.Post(url, data=file) while requests.Post is executing print('.')Por supuesto, el código anterior es solo un pseudocódigo, pero espero que ilustre lo que espero lograr.
Cada llamada de función del módulo de requests se bloquea, por lo que su programa espera hasta que la función devuelva un valor. La solución más simple es usar la biblioteca de threading incorporada que ya se sugirió. El uso de este módulo le permite usar código "paralelismo"*. En su ejemplo, necesita un hilo para la solicitud que se bloqueará hasta que finalice la solicitud y el otro para imprimir.
Si desea obtener más información sobre soluciones más avanzadas, consulte esta respuesta https://stackoverflow.com/a/14246030/17726897
Así es como puede lograr la funcionalidad deseada utilizando el módulo de threading
def print_function(stop_event): while not stop_event.is_set(): print(".") sleep(10) should_stop = threading.Event() thread = threading.Thread(target=print_function, args=[should_stop]) thread.start() # start the printing before the request rsp = requests.Post(url, data=file) # start the requests which blocks the main thread but not the printing thread should_stop.set() # request finished, signal the printing thread to stop thread.join() # wait for the thread to stop # handle response* el paralelismo está entre comillas debido a algo como el Global Interpreter Lock (GIL). Las declaraciones de código de diferentes subprocesos no se ejecutan al mismo tiempo.
Realmente no obtengo lo que busca, pero si desea que se procesen dos cosas al mismo tiempo, puede usar el módulo de multithreading múltiples. Ejemplo:
import threading import requests from time import sleep def make_Request(): while True: req = requests.post(url, data=file) sleep(10) makeRequestThread = threading.Thread(target=make_Request) makeRequestThread.start() while True: print("I used multi threading to do two tasks at a same time") sleep(10)o puede usar un módulo de programación muy simple para programar sus tareas de una manera fácil
documentos: https://schedule.readthedocs.io/en/stable/#when-not-to-use-schedule
import threading import requests from time import sleep #### Function print and stop when answer comes ### def Print_Every_10_seconds(stop_event): while not stop_event.is_set(): print(".") sleep(10) ### Separate flow of execution ### Stop = threading.Event() thread = threading.Thread(target=Print_Every_10_seconds, args=[Stop]) ### Before the request, the thread starts printing ### thread.start() ### Blocking of the main thread (the print thread continues) ### Block_thread_1 = requests.Post(url, data=file) ### Thread stops ### Stop.set() thread.join()