6 votes

Exemple de multithreading Cherrypy

Je sais que cherrypy est un système multithread et dispose également d'une implémentation de threadpool.
J'ai donc voulu essayer un exemple montrant un comportement multithread.
Maintenant, disons que j'ai une fonction dans la classe Root et que tout le reste est configuré.

def testPage(self, *args, **kwargs):
    current = threading.currentThread()
    print 'Starting ' , current
    time.sleep(5)
    print 'Ending ' ,current
    return '<html>Hello World</html>'

Maintenant, disons que je lance ma page en tant que http://localhost:6060/Root/testPage dans 3-4 onglets du navigateur.
Le résultat que j'obtiens est

Starting <WorkerThread(CP WSGIServer Thread-10, started 4844)>
Ending <WorkerThread(CP WSGIServer Thread-10, started 4844)>
Starting <WorkerThread(CP WSGIServer Thread-7, started 4841)>
Ending <WorkerThread(CP WSGIServer Thread-7, started 4841)>
Starting <WorkerThread(CP WSGIServer Thread-10, started 4844)>
Ending <WorkerThread(CP WSGIServer Thread-10, started 4844)>

Je peux clairement comprendre qu'il crée de nouveaux threads pour traiter chaque nouvelle demande, mais je n'arrive pas à comprendre pourquoi chaque fois que j'obtiens
commencer... finir... commencer... finir
et pourquoi ne pas commencer...commencer...finir...finir parfois
Parce que je suppose que time.sleep va suspendre certains threads et que d'autres pourront s'exécuter à ce moment-là.

2voto

fumanchu Points 8291

Il s'agit très certainement d'une limitation de votre navigateur et non de CherryPy. Firefox 2, par exemple, n'effectue pas plus de deux requêtes simultanées vers le même domaine, même avec plusieurs onglets. Et si chaque onglet récupère également un favicon... cela ne laisse qu'une seule requête à la fois à votre gestionnaire.

Voir http://www.cherrypy.org/ticket/550 pour un billet avec un code source similaire, et une preuve plus longue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X