Multi Thread, httpServer, methode serve_forever, DO_GET et Queue
Bonjour à tous,
J'avoue qu'ici je suis bien bien bloqué !
J'ai une raspberry pi, executant un script en python, et censé faire l'interface entre une arduino et un serveur (je précise que l'interface pi->arduino est implémenté et fonctionnel).
J'essaie à présent de faire l'interface entre mon serveur et la pi...
J'initialise donc mon serveur (sur la raspberry pi) :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
def init_serveur():
PORT = 8080
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
#Handler = Handler_perso
httpd = SocketServer.TCPServer(("", PORT), MyHandler)
print "serving at port", PORT
return httpd |
puis je lance un nouveau thread dans lequel j'appelle la méthode "serve_forever"
(mon main)
Code:
1 2 3
| t_serveur=thread_serveur(httpd)
t_serveur.daemon=True
t_serveur.start() |
(ma classe thread)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class thread_serveur(Thread):
def __init__(self, httpd):
Thread.__init__(self)
self.httpd=httpd
def run(self):
"""Code à exécuter pendant l'exécution du thread."""
print("ok")
#self.queue_serveur.put("data reçu du serveur")
try:
self.httpd.serve_forever()
except (KeyboardInterrupt):
print("fermeture du serveur")
httpd.server_close() |
jusqu'ici tout va bien ! la boucle sur mon main continue à tourner, et le serveur est bien lancé dans mon thread "t_serveur"
c'est ici que les choses se corsent...
pour tester, je ping donc ma Raspberry depuis un navigateur ("mon adresse ip:8080") et ça fonctionne : je peux acceder à cette adresse, et sur la console de ma rapsberry, on m'affiche qu'une requête get a été envoyé au serveur de la Rpi=> nickel
j'aimerais à présent (dans un premier temps) instancier une variable dés qu'une requête GET (ou POST) est effectué, et pouvoir utiliser cette variable dans mon main, et c'est là que je bloque...
D'après ce que j'ai compris, pour pouvoir gérer cet événement, il faut que j'override la méthode DO_GET de ma classe "MyHandler" (quelque chose du style : )
Code:
1 2 3 4
|
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(s):
self.flag_GET=True |
mais je n'ai aucune idée comment récuper ma variable "flag_GET" ailleurs dans mon script (et particulièrement comment la récuperer dans mon main où je vais devoir l'utiliser.
La première étape selon moi et de réussir à la récupérer ailleurs dans mon thread t_serveur : étant donné que je n'appelle jamais la méthode DO_GET mais que celle-ci s'appelle "automatiquement" via "serve_forever" je n'ai aucune idée de comment la récuperer ailleurs
Puis je devrais la récuperer depuis mon t_serveur jusqu'à mon main pour cela, j'ai cru comprendre que je devrais utiliser une Queue, c'est encore très abstrait pour moi, mais pour cette étape ça devrait aller...
Merci d'avance pour votre aide :)