Как стать автором
Обновить

Оптимизация Gunicorn для быстрых клиентов

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров988
Всего голосов 2: ↑2 и ↓0+4
Комментарии2

Комментарии 2

если ядер больше, то можно смело увеличивать количество воркеров по формуле

А почему бы нам не автоматизировать использование данной формулы для автоопределения количества дотсупных логических ядер на виртуальной машине. Например, с помощью такого скрипта gunicorn.conf.py

import fcntl
import multiprocessing
import socket
import struct


def get_ip_address(ifname):
    """Return current IP of our web app."""
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,
        struct.pack('256s', bytes(ifname[:15], 'utf-8'))
    )[20:24])


ip_address = get_ip_address('eth0')

bind = f'{ip_address}:8000' # Здесь свой порт выберите
workers = multiprocessing.cpu_count() * 2 + 1

timeout = 2
preload = True
loglevel = 'info'

Ну а дальше все очень просто:

gunicorn -c ./gunicorn.conf.py wsgi:app

Крайне не рекомендую множить на 2 виртуальные ядра (в моём случае с EC2), поскольку виртуальная машина перестаёт вывозить.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории