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.
3 Réponses :
# 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)
existe-t-il un décorateur de minuterie em> p>
Si vous êtes autorisé à utiliser des bibliothèques externes, je suggère de regarder Timeout-Decorator . p>
Je l'ai résolu avec l'utilisation d'une bibliothèque de signal
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é.