Le Coin Wiki
d'Olivier Dalle
$WikiTagline
 

Exercice 3: Un serveur web concurrent?

Dans les exemples prcdents, 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 simultanes peut tre trs lev. Cela se traduit par une lenteur dsagrable, voire inacceptable du serveur. Pour parer ce problme, une ide 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 pre accepte les connections, puis qu’il cre un processus fils pour trater chaque nouvelle connection.

Le petit programme suivant illustre comment crer un processus fils en python sur un systme 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 cration de processus se fait de faon trs diffrents sous windows ou la primitive fork() n’existe pas (le problme 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 expliques, 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