2016-12-09 8 views
0

Wenn ich die Option app.run(threaded=True)) in Kolben einstelle, kann mein Dienst mehrere gleichzeitige Anfragen verarbeiten. Aber es scheint, dass mein Dienst so viel CPU-Ressourcen wie möglich verbraucht, um mehrere gleichzeitige Anfragen zu bearbeiten. Gibt es eine Einschränkung oder Kontrolle der Ressourcen, die von meiner App verwendet werden?Kontrollressourcen für mehrere gleichzeitige Anfragen in Kolben

+0

Mein Rat ist, einen besseren wsgi Server wie uwsgi zu verwenden oder nicht der Entwicklungsserver von Kolben gunicorn, sie haben beide Möglichkeiten zur Steuerung von Systemressourcen – danidee

+0

Ich versuchte gunicorn mit Optionen: gunicorn --workers = 4 -t 3000 myapp -b Anschluss. Ich habe keine Ahnung, ob es in meinem Fall funktioniert oder nicht (ich möchte nur die Hälfte der CPU-Ressourcen für meinen Dienst verwenden), weil mein Dienst etwa 8-10 Prozesse erstellt hat, wenn 4 Anfragen vorhanden sind. –

+0

Mein Gedanke ist dann, dass die Anzahl der gleichzeitigen Prozesse gleich der halben Anzahl der Kerne Ihres Prozessors sein soll. z.B. 2 Prozesse auf einer 4-Kern-CPU können nur 50% der Ressourcen verbrauchen. – sytech

Antwort

0

Sie können versuchen, das Ressourcenmodul zu verwenden. Genommen von this post. Sie würden so etwas für die CPU machen. Here is die Seite auf dem Ressourcenmodul.

import resource 
sec = 60 * 60 # this is one hour of time. 
resource.setrlimit(resource.RLIMIT_CPU, sec) 

Hinweis, ändert sich die Zeitdauer (in Sekunden), dass der Prozess in der CPU erlaubt. Wenn Sie die Größe der Stack/Heap-Größe des Prozesses begrenzen möchten, müssen Sie resource.RLIMIT_STACK und resource.RLIMIT_HEAP verwenden. Diese sind in Bytes, also würde der Code ungefähr so ​​aussehen.

import resource 
mem = 1024 * 1024 # this is one megabyte, you want much more than this normally 
resource.setrlimit(resource.RLIMIT_STACK, mem) 
resource.setrlimit(resource.RLIMIT_HEAP, mem) 
+0

Wird dies zu Konflikten führen? Da mein Dienst Multiprocessing ist, werden 4 Prozesse erstellt, um jede Anfrage zu bedienen. –

+0

Nein, Multiprocessing verwendet Threads, auch wenn es nicht so aussieht. Ein Prozess ist ein einzelnes Programm, wenn das Programm ein anderes Programm startet, sollte es als ein Thread starten. Ich kann mich dabei irren, vielleicht musst du es einfach als Thread starten, ich bin mir nicht sicher, wie Python Multiprocessing funktioniert. Wenn es nicht funktioniert, dann können Sie für jeden Prozess dasselbe tun, indem Sie die Menge der Ressourcen begrenzen, die sie haben. –

+0

Eigentlich hat ein wsgi Server (Gunicorn) mein Problem gelöst. –

Verwandte Themen