0
votes

Comment puis-je exécuter une fonction pour seulement 5 minutes?

import logging

from a.x.models import X
from a.x.management.commands.syncx \
    import Command as SyncCommand

from a.x.adapter_classes import ADAPTER_CLASSES

LOGGER = logging.getLogger(__name__)


def logger_function(code):
    if not X.objects.filter(code=code).exists():
        X.objects.create(code=code)
        LOGGER.info(f"{X} created")

    args = []
    kwargs = {'x_code': code,
              'class': False,
              'database': 'default'}

    try:
        LOGGER.info(f"Starting syncx command for {code}")
        #or this command needs to be run just 5 minutes for every key
        SyncCommand().handle(*args, **kwargs)
        LOGGER.info(f"There is no error for {code}")

    except Exception as error:
        with open("logger.txt", "a") as file:
            file.write(f"{code}'s error is : {error}")
            LOGGER.info(f"Logging error about {code}\n")


def run():
    for key in ADAPTER_CLASSES.keys():
        #this function needs to be run just 5 minutes for every key
        logger_function(key)
My logger_function needs to be run for 5 minutes. Is there any timer decorator or thread destroyer with timer ? How can I do this.
My for loop is shifting in keys and sending to logger function , if there any problem for try except block its okey , but if everything right for my SyncCommand it can take a many hours, bu i just want to logging errors in first 5 minutes.

2 commentaires

Que devriez-vous arriver après les 5 minutes? Et si l'enregistreur est en train de faire quelque chose d'important quand cela se produit?


Lorsque la commande finale de 5 minutes doit s'arrêter et la commande doit démarrer pour la clé suivante. Mon objectif est d'enregistrer des erreurs si vous travaillez correctement en 5 minutes, je suis sûr qu'il y a ni erreur concernant la clé.


3 Réponses :


0
votes
    # importing the required module 
import timeit 
  
# code snippet to be executed only once 
mysetup = "from math import sqrt"
  
# code snippet whose execution time is to be measured 
mycode = ''' 
def example(): 
    mylist = [] 
    for x in range(100): 
        mylist.append(sqrt(x)) 
'''
  
# timeit statement 
print timeit.timeit(setup = mysetup, 
                    stmt = mycode, 
                    number = 10000) 

0 commentaires

1
votes

existe-t-il un décorateur de minuterie

Si vous êtes autorisé à utiliser des bibliothèques externes, je suggère de regarder Timeout-Decorator .


0 commentaires

0
votes

Je l'ai résolu avec l'utilisation d'une bibliothèque de signal xxx


0 commentaires