J'ai une fonction qui surveille en permanence une API. Fondamentalement, la fonction reçoit les données, analysse ensuite l'appendre à un fichier. Ensuite, il attend 15 minutes et fait la même chose. P>
Ce que je veux, c'est exécuter cette boucle en arrière-plan, donc je ne bloque pas le reste de mon code d'exécution. p>
4 Réponses :
Essayez MULTHREADING:
import threading def background(): while True: number = int(len(oilrigs)) * 49 number += money time.sleep(1) def foreground(): // What you want to run in the foreground b = threading.Thread(name='background', target=background) f = threading.Thread(name='foreground', target=foreground) b.start() f.start()
Cela a fonctionné mais cela a créé un nouveau problème pour moi. J'utilisais de la fiole pour servir ce fichier que j'ai mentionné plus tôt. Maintenant, lorsque j'exécute le script, tout fonctionne jusqu'à ce que je doive fermer le serveur. À ce stade, le processus sera suspendu jusqu'à ce que je tue le fil manuellement
Ceci est très large, mais vous pourriez jeter un coup d'œil sur le Multiperfessing a > ou filetage modules Python.
pour exécuter un fil en arrière-plan Cela ressemblerait à ceci: P>
from threading import Thread def background_task(): # your code here t = Thread(target=background_task) t.start()
Essayez Multi Filetage
import threading def background(): #The loop you want to run in back ground b = threading.Thread(target=background) b.start()
Si vous utilisez Asyncio (je suppose que vous êtes due à la balise ASYNCIO), une opération planifiée peut être effectuée à l'aide d'une tâche.
from concurrent.futures import ThreadPoolExecutor executor = ThreadPoolExecutor() def call_api(): ... async def check_api(): while True: await loop.run_in_executor(executor, call_api) await asyncio.sleep(15 * 60) # 15 minutes (in seconds)
Cela ressemble à une grande tâche pour un travail cron.