Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Besoin d'aide sur les threads...

Besoin d'aide sur les threads...

Remonter à Forum général Python
  • Besoin d'aide sur les threads...

    Envoyé par ph_biohazard le 28 Février 2007 à 01:49
    Bonjour a tous,

    J'aimerai incorporer un petit serveur http dans un de mes scripts.

    Par contre, pour maintenir le serveur http en ligne pendant toute la duree d'utilisation de mon script, je pense qu'il faut faire un thread (corrigez moi si je me trompe).
    Par consequent, j'ai essaye d'inserer un thread de mon serveur, mais que dois je mettre dans le def?

    Voici mon thread:

    import threading
    from BaseHTTPServer import HTTPServer
    from CGIHTTPServer import CGIHTTPRequestHandler

    def monOuebe():
    os.chdir("c:/html")
    serveur = HTTPServer( ("", 40000), CGIHTTPRequestHandler)
    serveur.serve_forever()
    monouebeSrv = threading.Thread(None, monOuebe, None, None, {})
    monouebeSrv.start()

    Mais cela ne fonctionne pas.

    Quel serait les bons arguements?

    Merci pour votre aide
    Amities
    Marc
    • Re: Besoin d'aide sur les threads...

      Envoyé par domtom le 8 Mars 2007 à 22:51
      Salut,

      après quelques soirs de recherche, j'ai enfin trouvé la solution, elle se trouve dans le module
      SocketServer.ThreadingMixIn



      import BaseHTTPServer
      import SimpleHTTPServer
      import SocketServer

      class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
      ...
      class Server(SocketServer.ThreadingMixIn,
      BaseHTTPServer.HTTPServer):
      def __init__(self, args):
      SocketServer.TCPServer.__init__(self,
      (socket.gethostname(), 8080),
      Handler)

      ... et c'est tout.
      J'ai testé, ça à l'air de plutôt bien marcher.


      DomTom
      • Re: Besoin d'aide sur les threads...

        Envoyé par ph_biohazard le 13 Mars 2007 à 23:45
        Salut DomTom,

        Desole pour la reponse tardive.

        J'ai essaye d'inserer ton code dans le mien, mais, je suis debutant en python, et les classes que tu as notees ne s'executent pas qd je lance mon script.

        Pourrais tu m'inserer ton code dans le mien que je vois comment tu appelles tes classes?
        Je te redonne du coup l'exemple du serveur rudimentaire :


        from BaseHTTPServer import HTTPServer
        from CGIHTTPServer import CGIHTTPRequestHandler
        import os, cgi
        from time import localtime, strftime
        import time

        os.chdir("c:/html")

        serv = HTTPServer( ("", 80), CGIHTTPRequestHandler)

        serv.serve_forever()


        Je te remercie pour ton aide
        Marc
    • Re: Besoin d'aide sur les threads...

      Envoyé par domtom le 28 Février 2007 à 09:25
      salut,
      les threads ne sont pas obligatoires, surtout si tu penses que ton serveur ne supportera pas beaucoup de connexions simultanées.

      Pour en revenir à ton code, la fonction serve_forever est une boucle infinie qui ne s'arrêtera qu'à l'arrêt du serveur. Donc l'exécution de ton thread ne se fera qu'à l'arrêt du serveur.
      J'avais essayé de faire quelque chose du même genre mais sans résultat donc si quelqu'un a la solution je suis preneur aussi ;)

      Dans mon code je redéfinissais la classe HTTPRequestHandler en ajoutant un héritage supplémentaire Thread. Ca donnait quelque chose comme cela :


      class MonRequestHandler(HTTPRequestHandler, threading.Thread):
      def __init__(self, *args, **kw):
      threading.Thread.__init__(self)
      HTTPRequestHandler(self, *args, **kw)
      def handle(self):
      thread.start_new_thread(SimpleHTTPRequestHandler.handle, (self,))
      ....

      Mais sans succès...
      Donc si quelqu'un a une idée supplémentaire...

      DomTom
      • Re: Besoin d'aide sur les threads...

        Envoyé par ph_biohazard le 28 Février 2007 à 10:19
        Salut DomTom,

        Oui serv.forever est une boucle infinie et mon Tkinter aussi...donc 2 loop c'est logique que ca ne fonctionne pas.

        Mais qui peut le plus peut le moins, je pense qu'en meme que le thread est la meilleure solution.

        Mais j'y pensais cette nuit, peut faut il que threadifie mes deux scripts dans ce cas. Un pour le script avec Tk et l'autre pour le serveur HTTP?

        Est-ce que qqun pourrait nous aider?

        Merci a tous
        Marc
Rendu par Ploneboard