• [^] # Re: C'est beaucoup ?

    Posté par (Mastodon) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 6.

    Avec un truc en bottle vite fait, je monte à 3400 req/s pour fournir le fichier directement, sans redirection, alors que je suis à 2800 req/s pour la redirection.
    Le serveur par défaut est mono-thread, mais utiliser des trucs multi-thread ou asynchrones, ne change pas grand chose vu la simplicité des traitements.

    #!/usr/bin/python3
    from bottle import route, run, response
    import glob
    import random
    # preloading files
    def readfile(path):
     try:
     with open(path, 'rb') as f:
     a = f.read()
     return (a, len(a))
     except Exception:
     return (None, 0)
    files = [
     (c, l)
     for path in glob.glob('*.png')
     for (c, l) in [readfile(path)]
     if l
    ]
    @route('/')
    def img():
     img, size = random.choice(files)
     response.set_header('Content-Type', 'image/png')
     response.add_header('Content-Length', size)
     return img
    run(host='localhost', port=8080)

    Et la version courte :

    #!/usr/bin/python3
    from bottle import route, run, redirect
    import glob
    import random
    files = glob.glob('*.png')
    @route('/')
    def img():
     redirect(random.choice(files))
    run(host='localhost', port=8081)

    Après plusieurs benchmark ab comme dans le journal sur chaque serveur, la RAM utilisée est de 21Mo pour chacun (25,3Mo en VSZ, 20,8Mo en RSS).

    Je suis surtout surpris du fait que la redirection soit plus lente.
    Peut-être qu'en balançant manuellement les headers ça irait plus vite que le Bottle.redirect().
    Pourtant je ne fais plus aucune IO disque après le démarrage, dans les deux cas, ça devrait être relativement équivalent.

    Bref, après, c'est difficile de comparer les chiffres bruts alors qu'on n'est pas sur la même machine.

    • Yth.