Sauvegarde automatique par intervale de x secondes

NewUserPython -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonjour,

Je suis a mes premiers jours d'apprentissage du langage python et je cherche a comprendre la gestion du temps. Je souhaiterais en autre créer une fonction qui exécute une action tout les X secondes tout en poursuivant son exécution. J'ai fait plusieurs recherche sur internet et je n'ai rien trouvé de fonctionnel sur internet et/ou compréhensible pour un débutant comme je suis.

# Sauvegarde
def sauvegarde(info_a_save):
    with open("infosave.txt","a") as fichier:
        fichier.write(info_a_save + "\n")

# Fin d'exécution
def finrun():
    exit()

# Code s'exécutant en boucle tant qu'il n'est pas interrompu par un Ctrl+c
while True:
    # Exemple de donnée a sauvegarder
    info_a_save = "Bonjour"
    # Connaissance manquante pour se qui suit
    if # intervalle de 29s:
        sauvegarde(info_a_save)
    elif # intervale de 300s:
        finrun()
    

Parmi mes recherches, j'ai en autre trouver le module Scheduler:

from apscheduler.scheduler import Scheduler

sched = Scheduler()
sched.start()

def some_job():
    print("Every 10 seconds")

sched.add_interval_job(some_job, seconds = 10)

Mais j'ai l'erreur:

ModuleNotFoundError: No module named 'Scheduler'

J'ai pourtant fait l'installation via:

pip3 install scheduler

Merci a l'avance pour votre aide.
Windows / Firefox 104.0

A voir également:

6 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

je ne comprends pas "une fonction qui exécute une action tout les X secondes tout en poursuivant son exécution".

Peux-tu donner un exemple?

0
NewUserPython
 

Exemple poster plutot:

# Sauvegarde
def sauvegarde(info_a_save):
    with open("infosave.txt","a") as fichier:
        fichier.write(info_a_save + "\n")

# Fin d'exécution
def finrun():
    exit()

# Code s'exécutant en boucle tant qu'il n'est pas interrompu par un Ctrl+c
while True:
    # Exemple de donnée a sauvegarder
    info_a_save = "Bonjour"
    # Connaissance manquante pour se qui suit
    if # intervalle de 29s:
        sauvegarde(info_a_save)
    elif # intervale de 300s:
        finrun()
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Je te demande un exemple de ce que tu souhaites obtenir, fonctionnellement.

Un code, a fortiori un code qui ne fonctionne pas, ne peut pas remplacer une explication claire de ce que tu veux obtenir.

La langue française permet, entre humain, de communiquer, bien mieux qu'un langage de programmation.

-1
noplou
 

Bonsoir, pourquoi ne pas utiliser un simple thread ? Ou si c'est une simple sauvegarde périodique, sans doute qu'une tâche cron, planifiée sur windows serait suffisante ?

1
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 

Salut,

c'est un problème de programmation temps-réel.

Donc, soit tu passes par un programme qui ne fait que lancer une tâche toutes les n secondes et en en faisant rien.

Soit tu t'arranges pour avoir un programme qui bosse et qui reçoit et traite une interruption toutes les n secondes afin de lancer la tâche. Mais là, il faut avoir un peu de bouteille car sauver un contexte d'exécution en temps réel (surtout si le programme principal est en attente de retour d'I/O par exemple), c'est touchy...


0
NewUserPython
 

J'ai trouvé la solution, je suis pas sur qu'elle soit la meilleure, mais elle fonctionne

@noplou, je ne suis pas encore rendu a apprendre sur les thread, j'ai quand même fait une petite lecture tres rapide et j'ai trouvé cela tres intéressant. j'ai hate d'en faire l'expérimentation.

Au cas ou que d'autre cherche comme moi, voici se qui répondait à ma recherche:

import time

global starttime
starttime= 0.0

# Sauvegarde
def sauvegarde(info_a_save):
    with open("infosave.txt","a") as fichier:
        fichier.write(str(info_a_save) + "\n")

# Fin d'exécution
def finrun():
    exit()

# Code s'exécutant en boucle tant qu'il n'est pas interrompu par un Ctrl+c
while True:
    # Exemple de donnée a sauvegarder
    info_a_save = time.time()
    # Solution trouvé
    if starttime == 0.0:
        starttime = time.time()
        savetime = time.time()
    elif savetime+29 < time.time():
        sauvegarde(info_a_save)
        savetime = time.time()
    elif starttime+300 < time.time():
        finrun()
0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 

En fait, ton programme ne fait rien d'autre que lancer une fonction toutes les n secondes, donc entre ces lancements, il ne fait rien d'autre que regarder si les conditions de lancement sont réunies.

Ce qui est différent de ta demande initiale qui indique que le programme doit continuer son exécution.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Tu as intérêt à ajouter une pause dans la boucle, il est inutile de la faire tourner en permanence.

Au lieu de faire le test "if starttime == 0.0:", il serait préférable de mettre les instructions sous le test hors de la boucle.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NewUserPython
 

Pour le moment, effectivement, il ne fait rien, mais son but sera de surveiller certain processus Windows en autre avec la commande tasklist et de sauvegarder de facon régulière les résultats.

En développement pour le moment. J'étais bloqué sur la notion de sauvegarde de l'information trouvé. Maintenant que j'ai trouvé une solution, je peu m'attaquer à la récupération des données.

0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 

Fais attention que ce que tu lances ne dure pas plus longtemps que ton intervalle de vérification...

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention  
 

Que se passe-t-il si la fonction dure plus longtemps que l'intervalle?  L'intervalle, c'est entre la fin de l'exécution de la fonction et le début de l'exécution suivante.

0
NewUserPython
 

Merci @blux pour l'information. J'imagine que s'est la que les thread prendrait toute leur importance.

0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 

Ca ne changerait rien si ton thread dure plus que ton intervalle !

0