Enseignements

Python V 2 Tp 5 Exo 3

Exercice 3: Un serveur web concurrent?

Dans les exemples précédents, lorsque le processus est occupé à lire un socket de transfert, il n’est pas disponible pour accepter une connection, et vice-versa. Dans le cas d’un serveur web, le nombre de connections simultanées peut être très élevé. Cela se traduit par une lenteur désagréable, voire inacceptable du serveur. Pour parer à ce problème, une idée classique consiste à construire un serveur multi-processus: au lieu de faire faire tout le travail à un seul processus, on fait appel à plusieurs processus. Par exemple, on peut faire en sorte que seul le processus père accepte les connections, puis qu’il crée un processus fils pour traîter chaque nouvelle connection.

Le petit programme suivant illustre comment créer un processus fils en python sur un système Unix (Linux, MACOS):

import sys, os

pid = os.fork()
if pid == 0:
    getp = os.getpid()
    pere = os.getppid()
    print "je suis le processus fils: pid=%d, getp=%d, pere=%d"%(pid, getp, pere)
    sys.exit(0)
else:
    getp = os.getpid()
    pere = os.getppid()
    print "je suis le processus fils: pid=%d, getp=%d, pere=%d"%(pid, getp, pere)
    sys.exit(0)

Malheureusement, la création de processus se fait de façon très différents sous windows ou la primitive fork() n’existe pas (le problème ne vient pas de Python, mais de Windows qui n’est pas conforme a la norme POSIX). Les plus curieux d’entre-vous peuvent aller voir cette page où les differences sont expliquées, ainsi que nombre d’autres choses a propos du module os, que nous n’avons malheureusement pas el temps de voir ensemble…

Retour en haut de la feuille d’exercice

Page d’Accueil

Enseignements 2017-18

Enseignements Antérieurs

Recherche…

edit SideBar

Blix theme adapted by David Gilbert, powered by PmWiki