Как использовать несколько ядер с веб-сервисом на основе Python Klein

Я пишу веб-сервис на основе фреймворка Кляйна

https://klein.readthedocs.io/en/latest/index.html

На данном этапе я тестирую свой сервис, он может обрабатывать около 70 запросов в секунду на экземпляре amazon t2.medium. Но когда я использую top для проверки сервера, он использует только 100% CPU. Я думаю, что экземпляр amazon t2.medium должен иметь 2 процессора, поэтому мне интересно, есть ли способ изменить код моего веб-сервиса, чтобы использовать все возможные процессоры и, надеюсь, обрабатывать больше запросов.

Я прочитал документацию Python и нашел multiprocessing модуль, но я не уверен, что это будет правильным решением. Прямо сейчас основная функция моего веб-сервиса

APP = Klein()
if __name__ == "__main__":
    APP.run("0.0.0.0", SERVER_PORT)

Существует ли прямое исправление, позволяющее этой службе использовать несколько процессоров для обработки входящих запросов? Спасибо, что прочитали вопрос.

1 ответ

Решение

Конечно, можно использовать multiprocessing и это, конечно же, чертовски легко ускорить процессы.

from multiprocessing import Process
from klein import Klein

def runserver(interface, port, logFile):
    app = Klein()
    @app.route('/')
    def heyEarth(request):
        return 'Hey Earth!'
    app.run(interface, port, logFile)

process_list = []
for x, port in enumerate([8000, 8001, 8002, 8003]):
    logfilename = open('localhost' + str(port) + '.log', 'a')
    process_list.append(Process(target=runserver, args=('localhost', port, logfilename)))
    process_list[x].daemon = True
    process_list[x].start()

process_list.pop().join()

В корпоративной среде лучше и надежнее работать за выделенным балансировщиком нагрузки, таким как nginx. Таким образом, приведенный выше фрагмент должен использоваться только для запуска веб-серверов, тогда вся ваша балансировка нагрузки должна обрабатываться выделенным балансировщиком нагрузки.

Держите многопроцессорный код на минимальном уровне, иначе базовые вещи, такие как отладка и общие системные файлы, станут раздражать. И это "нормальный" материал, есть МНОЖЕСТВО НЕНОРМАЛЬНОСТИ, которые могут возникнуть, и никто не сможет помочь вам, потому что вы сами не знаете, что происходит. Просто запустив этот фрагмент, я заметил несколько странных вещей с сигналами и Twisted. Я думаю, что это может быть исправлено, если я запустил все klein импорт в runserver(),

Получайте информацию, учитесь на чужих ошибках, прислушайтесь к предупреждениям тех, кто был сожжен multiprocessing и иди сделай приложение! Надеюсь, это поможет:D

Рекомендации

  • Tornado: Запуск и развертывание - это документ Tornado, но он все равно должен помочь
  • Multicore TwistedWeb - это "Twisted" подход к многопроцессорности со стороны разработчика ядра. Стоит прочитать всем, кто хочет запускать процессы Twisted и spawn.
Другие вопросы по тегам