0
votes

Comment puis-je courir une boucle infinie à l'arrière-plan?

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.

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.


1 commentaires

Cela ressemble à une grande tâche pour un travail cron.


4 Réponses :


0
votes

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()


1 commentaires

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



1
votes

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()


0 commentaires

0
votes

Essayez Multi Filetage

import threading
def background():
    #The loop you want to run in back ground
b = threading.Thread(target=background)
b.start()


0 commentaires

3
votes

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)


0 commentaires