Trage Aanvragen op Lokale Kolf Server

Gewoon beginnen te spelen rond met de Kolf op een lokale server en ik ben het opmerken van het request/response-tijden zijn manier langzamer dan voel ik ze zou moeten zijn.

Gewoon een simpele server als de volgende van ongeveer 5 seconden op te reageren.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "index"

if __name__ == "__main__":
    app.run()

Ideeën? Of is dit gewoon hoe de lokale server is?

  • Het is niet de lokale server, maar het kan te maken hebben met andere toepassingen op de achtergrond wat OS gebruikt u dit op?
  • Ik ben draait op OS X 10.7 op een i7 iMac
  • Het moet niet nemen van deze lang voor je reacties, maar ik heb eigenlijk gesleuteld kolf, voordat tot geen succes zou ik adviseren Bottlepy. Hoewel nog steeds controleer uw achtergrond processen die u mogelijk over een oudere versie van uw server in de achtergrond draait de overname van de python en de oorzaak van uw trage reacties. Ook kan uw browser gebeurt dit in chrome & safari?
  • antwoord goed is voor mij. In plaats van het veranderen van de host-instellingen, maar: Zou ik aanraden gewoon met 127.0.0.1 in plaats van localhost? Dat is het probleem opgelost zonder het wijzigen van de systeemconfiguratie.
InformationsquelleAutor Meroon | 2012-06-22

 

8 Replies
  1. 86

    Ok ik dacht dat het uit. Het lijkt een probleem te zijn met Werkzeug en os ‘ s die ipv6 ondersteunen.

    Van de Werkzeug site http://werkzeug.pocoo.org/docs/serving/:

    Op besturingssystemen die ondersteuning bieden voor ipv6 en geconfigureerd zoals moderne Linux, OS X 10.4 of hoger en Windows Vista sommige browsers kunnen een pijnlijk traag als de toegang tot uw lokale server. De reden voor dit is dat soms “localhost” is geconfigureerd om beschikbaar te zijn op zowel ipv4 en ipv6 socktes en sommige browsers zullen proberen om toegang te krijgen tot ipv6 eerste en vervolgens ivp4.

    Dus de oplossing is om ipv6 uitschakelen van de localhost door opmerkingen uit de volgende lijn van mijn hosts bestand:

    ::1             localhost 

    Zodra ik dit doen de latency problemen weg te gaan.

    Ik ben echt te graven Kolf en ik ben blij dat het niet een probleem met het framework. Ik wist dat het niet kon.

    • Ik vond deze nuttig: Windows techunboxed.com/2012/08/how-to-disable-ipv6-in-windows-8.html Ubuntu noobslab.com/2012/05/disable-ipv6-if-your-internet-is.html
    • bedankt! plotseling dev testen is pittig en reageren! mijn enige vraag: als de Mac hosts-bestand geeft aan dat het verwijderen van localhost invloed kunnen hebben op mijn Mac ‘ s, operaties, vraag ik me af of het is een verwijzing naar deze lijn (of de een die gewoon zoekt naar 127.0.0.1 localhost
    • op mijn windows-10 systeem in het hosts-bestand op beide items (ip4 en ip6) zijn besproken; deze zijn opgelost door het DNS-systeem. Ik kreeg een enorme snelheid te verhogen wanneer ik rende de server “127.0.0.1” in plaats van “localhost” (van 2,0 naar 0.003 sec voor eenvoudige gesprekken)
  2. 81

    Toevoegen “- schroefdraad=True” als een argument voor het app.run(), als hier wordt voorgesteld:
    http://arusahni.net/blog/2013/10/flask-multithreading.html

    Bijvoorbeeld: app.run(host="0.0.0.0", port=8080, threaded=True)

    De ipv6-uitschakelen oplossing werkte niet voor mij, maar dit deed.

    • Het passeren van --threaded mijn manage.py met Flask-Script gewerkt.
    • Voor degenen die het “vaste” door het inschakelen van draden, wees gewaarschuwd! In dit geval is de vertraging werd veroorzaakt door de eerdere aanvraag niet goed gesloten is, dus nu is het eigenlijk net stapelen veel threads.
    • Dank u meneer voor het maken van mijn localhost uitvoeren razendsnelle.
    • Is er een manier om te weten of de verzoeken worden niet goed gesloten is?
    • Waarschijnlijk is er een manier om dat te doen. Maar het is al een tijdje geleden werkte ik met python, dus ik kan niet veel helpen nu. Sorry.
    • Vanaf de commando-regel ik gebruikt flask run --with-threads dat mijn probleem opgelost.

  3. 11

    De oplossing van @sajid-siddiqi is technisch correct, maar houd er rekening mee dat de ingebouwde WSGI server in Werkzeug (die is verpakt in Kolf en wat het gebruikt voor app.run()) is alleen single-threaded.

    Installeren van een WSGI server te kunnen omgaan met multi-threaded gedrag. Ik heb een hoop onderzoek op verschillende WSGI server optredens. Uw behoeften kunnen variëren, maar als u Kolf, dan zou ik u aanraden een van de volgende webservers.

    Voor Python 2.x: gevent

    U kunt installeren gevent door pip met de opdracht pip install gevent. Instructies voor het wijzigen van uw code dienovereenkomstig bent hier: http://flask.pocoo.org/docs/0.10/deploying/wsgi-standalone/#gevent

    Voor Python 3.x: meinheld

    gevent is beter, maar het is nog steeds niet bijgewerkt te gebruiken python3 (zie deze thread voor updates: https://github.com/gevent/gevent/issues/38). Uit de benchmarks die ik heb bekeken die betrekking hebben op de echte wereld testen, meinheld lijkt het meest eenvoudig, simplistisch WSGI server. (U kan ook een kijkje nemen op uWSGI als je het niet erg wat meer configuratie.)

    U kunt ook installeren meinheld door pip3 met de opdracht pip3 install meinheld. Van daar, kijk naar het monster, mits in de meinheld bron te integreren Kolf: https://github.com/mopemope/meinheld/blob/master/example/flask_sample.py

    *OPMERKING: Uit mijn gebruik van PyCharm, de lijn from meinheld import server hoogtepunten als een fout, maar de server wordt uitgevoerd, zodat u kunt negeren van de fout.

    • Ik had ernstige problemen met de Kolf, zelfs de eenvoudigste verzoeken, met ongeveer 0,5 s te voltooien. Net overgestapt naar gevent en alles werkt perfect, dank je wel!
  4. 5

    Ik niet helemaal hebben de reputatie om commentaar te geven, dus ik zal het toevoegen van een “oplossing”.
    Mijn probleem werd opgelost door “schroefdraad=True”, maar ik wil om wat achtergrond te onderscheiden van mijn probleem van anderen die dit niet doen.

    1. Mijn probleem ontstond pas bij het uitvoeren van de Kolf met python3. Overschakelen naar python2, ik had niet langer dit probleem.
    2. Mijn probleem manifesteert zich alleen bij de toegang tot de api met Chrome, op welk punt, Chrome weergegeven van de verwachte scherm, maar alles hing (curl, ffx, etc) totdat ik ofwel reloaded of gesloten de Chrome-tabblad, en op dat moment alles anders, dat was het wachten rond geretourneerd gevolg.

    Mijn beste gok is dat Chrome was een poging om de sessie te openen en de Kolf was het blokkeren van de volgende aanvragen. Zodra de verbinding van Chrome is gestopt of gereset, alles was verwerkt.

    In mijn geval, draadsnijden vast. Natuurlijk, ik ben nu een aantal van de links die anderen hebben verstrekt om ervoor te zorgen dat het niet gaat om het veroorzaken van eventuele andere problemen.

  5. 3

    threaded=True werkt voor mij, maar uiteindelijk heb ik bedacht dat het probleem te wijten is aan foxyproxy op firefox. Sinds wanneer de kolf app draait op localhost, trage reactie gebeurt als

    • foxyproxy is ingeschakeld op firefox

    trage reactie zal niet gebeuren als

    • foxyproxy is uitgeschakeld op firefox

    • toegang tot de website met behulp van andere browsers

    De enige oplossing die ik gevonden is voor het uitschakelen van foxyproxy, probeerde toe te voegen localhost proxy ‘ zwarte lijst en tweaken instellingen, maar geen van hen werkte.

  6. 1

    Ik gebruikt Miheko ‘ s reactie op het oplossen van mijn probleem.

    ::1 localhost was al commentaar op mijn hosts-bestand, en het instellen van Threaded=true werkte niet voor mij. Elke REST verzoek aan het nemen was 1 seconde te verwerken in plaats van direct.

    Ik ben met behulp van python 3.6, en ik kreeg kolf om snel en responsief naar de REST van aanvragen door het maken van kolf gebruik gevent als WSGI.

    Te gebruiken gevent, installeren met pip install gevent

    Daarna gebruikte ik de https://gist.github.com/viksit/b6733fe1afdf5bb84a40#file-async_flask-py-L41 om de kolf te gebruiken gevent.

    Indien de link gaat naar beneden, hier is de belangrijke onderdelen van het script:

    from flask import Flask, Response
    from gevent.pywsgi import WSGIServer
    from gevent import monkey
    
    # need to patch sockets to make requests async
    # you may also need to call this before importing other packages that setup ssl
    monkey.patch_all()
    
    app = Flask(__name__) 
    
    
    # define some REST endpoints... 
    
    def main():
    
        # use gevent WSGI server instead of the Flask
        # instead of 5000, you can define whatever port you want.
        http = WSGIServer(('', 5000), app.wsgi_app) 
    
        # Serve your application
        http.serve_forever()
    
    
    if __name__ == '__main__':
        main()
    • schroefdraad=True werkt niet voor (het gebruik van python 3.6.7 en postbode), ben ik steeds VersionConflict: (greenlet 0.4.13 (c:\anaconda3\lib\site-packages), de Eis.parse(‘greenlet>=0.4.14; platform_python_implementation == “Vancpython”‘)), mag ik weten hoe om dit op te lossen, Bedankt
  7. 0

    Ik heb deze fout als die op andere hosts dan localhost, dus voor sommige, andere, onderliggende problemen kunnen vertonen dezelfde symptomen.

    Schakelde ik de meeste van de dingen die ik heb gebruikt om Tornado, en anekdotische het hielp een bedrag. Ik heb een paar pagina langzaam laadt, maar de dingen lijken over het algemeen meer ontvankelijk zijn. Ook zeer anekdotisch, maar ik meen op te merken dat de Kolf alleen zal vertragen in de tijd, maar Kolf + Tornado minder. Ik kan me voorstellen met behulp van Apache en mod_wsgi zou de dingen nog beter, maar Tornado ‘ s heel eenvoudig in te stellen (zie http://flask.pocoo.org/docs/deploying/others/).

    (Ook een gerelateerde vraag: Kolf app af en toe hangen)

  8. 0

    Ik had een andere oplossing. Ik heb net alles verwijderd .pyc van de server-directory en begon het weer.
    Door de manier, localhost werd al besproken in mijn hosts-bestand (Windows 8).

    De server vroor de hele tijd, en nu werkt het weer prima.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *