lancer plusieurs script en simultanée

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
NG-48
Messages : 2
Enregistré le : ven. 12 mai 2023 09:01

lancer plusieurs script en simultanée

Message par NG-48 » ven. 12 mai 2023 09:16

Bonjour a tous,

J'essaye de lancer 2 morceaux de programme en simultanée pour un projet de mon lycée. je n'ai trouver aucune solution pour le moment , voici les 2 programmes séparé:

Code : Tout sélectionner

import time
import grovepi

relay = 7
grovepi.pinMode(relay,"OUTPUT")

i=0


while i<5:
    grovepi.digitalWrite(relay,1)
    time.sleep(3)
    grovepi.digitalWrite(relay,0)
    time.sleep(1)
    i=i+1

grovepi.digitalWrite(relay,0)

le premier programme


Code : Tout sélectionner

import time
import grovepi

led = 2
button = 3

grovepi.pinMode(button,"INPUT")
grovepi.pinMode(led,"OUTPUT")


    
while True :    
    if grovepi.digitalRead(button) == 1:
        grovepi.digitalWrite(led,1)
        time.sleep(1)
        grovepi.digitalWrite(led,0)
    else :
        grovepi.digitalWrite(led,0)

et le second .

l'objectif serai de faire exécutée le Relay en arrière plan de manière passif et de faire en sorte que peut importe le moment où on appui sur le bouton , la led s'allume.

merci d'avoir pris le temps de lire et merci d'avance pour votre aide.
Modifié en dernier par NG-48 le mar. 16 mai 2023 08:14, modifié 1 fois.

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: lancer plusieurs script en simultanée

Message par piper » lun. 15 mai 2023 21:12

Bonjour,
Python a cette particularité d'utiliser les tabulations comme début et fin d'instructions conditionnelles.
D'où l'intérêt du bouton "code" </> dans le forum : cela permet de garder l'indentation
Car un simple copier coller la fait disparaitre.
Autrement dit, le code tel qu'il est affiché est incompréhensible et faut

En effet ceci provoque une erreur
if ceci:
fait cela
fait autre autre

et peut vouloir dire

Code : Tout sélectionner

if ceci:
     fait cela
     fait autre autre
Ou, ce qui n'est pas du tout la même chose :

Code : Tout sélectionner

if ceci:
     fait cela
fait autre autre
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

NG-48
Messages : 2
Enregistré le : ven. 12 mai 2023 09:01

Re: lancer plusieurs script en simultanée

Message par NG-48 » mar. 16 mai 2023 08:24

bonjour, étant nouveau sur les forums je ne connais pas cette commande et je n'arrive pas a l'utilisée,

pourriez-vous m'expliquer comment utilisée cette commande, merci d'avance

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: lancer plusieurs script en simultanée

Message par piper » mer. 17 mai 2023 01:05

Il n'y a aucune commande
Quand vous répondez au message, vous tapez dans une zone de texte.
En haut de cette zone se trouve des boutons
Il y a les B (Bold pour mettre en Gras), le I pour mettre en Italique , le U sous-ligné pour sous-ligner (underlined) un texte, puis une double quote pour citer et enfin le bouton dont je parle : </> pour encapsuler du code
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: lancer plusieurs script en simultanée

Message par piper » mer. 24 mai 2023 00:46

Bonjour,
Merci d'avoir modifier votre poste pour que le code soit bien formaté, on y voit plus clair.

Il y a plusieurs moyen de faire cela, tous sont basés sur le principe du "multi thread" (multi processing)
Ne vous inquiétez pas, c'est assez simple lorsque les fonctions le sont et sont peux nombreuses comme c'est le cas chez vous.

Vous pouvez faire donc ces 2 tâches dans un seul et même script
Inspirez vous du script ci-dessous :
On a ici 3 objets (class) pour qui on ne décrit qu'une méthode (run) et qui héritent des attributs de l'objet Thread.
J'y ai ajouté un nmax (nombre d'itérations) parmis les attributs.
Comme ils héritent de Thread, ils possèdent les attributs et méthodes de Thread (dont la méthode "start" qui va lancer la méthode "run" qui est décrite)
Important : pour arrêter un tel thread, on utilise la méthode join(), dans mon exemple ici cela va s'arrêter dès que i sera >= à nmax
Ex : app1.start() a lancé la méthode run de l'objet app1 qui est de class App1
app1.join() peut l'arrêter si nécessaire même en plein milieu du programme (par exemple, suite à une détection de l'action CTRL+C de l'utilisateur)

Code : Tout sélectionner

from threading import *
from time import *

class App1(Thread):
    def __init__(self,nmax=5):
        Thread.__init__(self)
        self.nmax=nmax
    def run(self):

        for i in range(self.nmax):
            print("thread 1")
            sleep(1)

class App2(Thread):
    def __init__(self,nmax=5):
        Thread.__init__(self)
        self.nmax=nmax
    def run(self):
        for i in range(self.nmax):
            print("thread 2")
            sleep(1)

class App3(Thread):
    def __init__(self,nmax=5):
        Thread.__init__(self)
        self.nmax=nmax
    def run(self):
        for i in range(self.nmax):
            print("thread 3")
            sleep(1)

app1 = App1(2)
app2 = App2(4)
app3 = App3(5)

app1.start()
app2.start()
app3.start()
Partez de là, retirez la partie App3 / app3 puisque vous n'avez besoin que de 2 thread
App1 pourrait gérer le relais tandis que App2 traiterait le bouton
Evidement, il faudra commencer le programme par faire les initialisations nécessaires.
Les boucles while peuvent être du type While True si vous voulez (j'aime pas trop ça mais bon, c'est pas de la production)

Il y a aussi d'autres méthodes possibles en python certains membres du forums en proposeront peut-être d'autres.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: lancer plusieurs script en simultanée

Message par jelopo » mer. 24 mai 2023 08:20

Bonjour,

Si les 2 scripts sont séparés, il y a la possibilité de les lancer dans la console Linux, le premier en tâche de fond (avec & en fin de ligne), puis le second.

Aller dans le répertoire où sont stockés les scripts et les lancer comme suit

Code : Tout sélectionner

python3 programme_relais &
python3 programme_bouton
Pour tuer le processus en tâche de fond faire

Code : Tout sélectionner

kill %1
avec 1 correspondant au premier processus lancé en tâche de fond.

A+

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: lancer plusieurs script en simultanée

Message par piper » mer. 24 mai 2023 18:11

C'est effectivement une solution que propose jelopo, exploitable dans votre cas car il n'y a pas d'accès exclusif au GPIO par l'un des 2 programmes (les 2 sont totalement disjoins : pas de partage de variables ou de données entre les 2).
A vous de voir la solution que vous comprenez le mieux.
Vous pouvez aussi essayer les 2, cela vous permettra de comprendre et d'expérimenter 2 méthodes différentes.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Répondre

Retourner vers « Python »