Programmation python qui plante après plusieurs minutes d'execution

Bonjour,

j’ai réalisé un script python qui me sert à faire de la video-surveillance.
Le code fonctionne plutôt bien pendant 30 minutes. puis il se met à planter / freezer au bout d’un certains temps. (le servo moteur ne réagit plus mais n’empêche pas la poursuite du script. l’acquisition d’image plante à l’enregistrement)
Je pensais que le problème pouvait être lié à la mise en veille du raspberry. Je l’ai donc désactivé mais rien n’y fait.
Savez-vous si c’est un problème connu avec les raspberry (par exemple saturation de la mémoire vive) ?

voici le code :

#!/usr/bin/python
import MySQLdb
import time
import RPi.GPIO as GPIO
import datetime
import picamera

GPIO.setmode(GPIO.BCM)
PIR = 21
GPIO.setup(26, GPIO.OUT) # servo
GPIO.setup(PIR, GPIO.IN)
GPIO.setup(12, GPIO.OUT) # Definition du port en sortie
GPIO.setup(16, GPIO.OUT) # Definition du port en sortie
GPIO.setwarnings(False) # Mettre sur OFF les alertes (qui sont inutiles)
#position du cadre au lancement du programme

def servo(angle, ajoutAngle):
pwm=GPIO.PWM(26,100)
pwm.start(5)
angleChoisi = float(angle)/10 + ajoutAngle
pwm.ChangeDutyCycle(angleChoisi)
time.sleep(5)

fin def servo

servo(5, 5)

def statut():
db = MySQLdb.connect(host=« 192.168.1.20 », # your host, usually localhost
user=« YYYY », # your username
passwd=« XXXX », # your password
db=« ZZZZZ ») # name of the data base
cur = db.cursor()
cur.execute(« SELECT * FROM survey order by id desc LIMIT 0, 1 »)
for row in cur.fetchall():

            statut1 = row[1]
            if statut1 == "no":

a = « non active »

                    servo(5, 5)

print a

return statut1

            elif statut1 == "oui" and GPIO.input(PIR):

a = « activation »

                    servo(70, 5)
                    print("Mouvement ! ")
                    GPIO.output(12, True)
                    #debut APN
                    with picamera.PiCamera() as camera:
                            camera.resolution = (1024, 768)
                            camera.start_preview()
                            time.sleep(1) #prechauffage APN
                            i = 0
                            nbpic=3
                            while i < nbpic :
                                    date = datetime.datetime.now().strftime("%d-%m-%Y-%H-%M-%S")
                                    camera.capture("/home/pi/scripts/pics/image"+ date + ".jpg")
                                    time.sleep(1)
                                    i = i + 1
                    #fin camera
                    GPIO.output(12, False)

return statut1

            else:

a = « activation »

                    servo(70, 5)

print a

return statut1

    db.close()

fin def statut

try:
print(" (CTRL+C to exit)")
#GPIO.output(16, True)
# nbpic = input (« entrez le nombre de photo par detection :\n »)
print « Ready »

    while True:
            statut()
           GPIO.output(16, True)
            time.sleep(3)
           GPIO.output(16, False)

except KeyboardInterrupt:
print(« Quit »)
servo(5, 5)
GPIO.cleanup()

As tu essayé

  • de laisser tourner le script sur le bureau (pour les écarts de droits admin/user) au lieu du service
  • en mettant ta prise de clichés dans un « try » avec un print (« erreur cliché ») dans le except ?
  • supprimer tous les print si le script tourne en service (j’ai eu souvent des erreur de codage en service et pas en « user »)
  • faire un « try/except » pour les erreur de connexion MySQLdb

bonjour Sergio_Laouine,

Merci d’avoir pris le temps de répondre. Entre temps j’ai trouvé mon problème… tu as mis le doigt sur la solution puisque le problème apparaissait uniquement lorsque je démarrais le script via crontab et sur une boucle bien précise du script.
Le problème venait tout bêtement du chemin défini en relatif pour l’enregistrement de l’image. J’ai résolu le problème en le passant en absolu.