Python sock.listen (...) - PullRequest
       15

Python sock.listen (...)

7 голосов
/ 15 марта 2010

Все примеры, которые я видел в sock.listen(5) в документации по python, показывают, что я должен установить максимальное число невыполненных заданий равным 5 Это вызывает проблему для моего приложения, так как я ожидаю очень большой объем (много одновременных подключений). Я установил его на 200 и не увидел никаких проблем в моей системе, но мне было интересно, как высоко я могу установить его, прежде чем он вызовет проблемы ..

Кто-нибудь знает?

Редактировать: вот мой цикл accept ().

while True:    
    try:
        self.q.put(sock.accept())
    except KeyboardInterrupt:
        break
    except Exception, e:
        self.log("ERR %s" % e)

Ответы [ 2 ]

16 голосов
/ 15 марта 2010

Вам не нужно настраивать параметр на listen() на большее число, чем 5.

Параметр определяет, сколько подключений, не поддерживающих accept(), могут быть ожидающими. Параметр listen() не имеет отношения к числу одновременно подключенных сокетов, только к числу одновременных подключений, которые не были accept() -обработаны процессом.

Если настройка параметра на listen() влияет на ваш код, это является признаком того, что между каждым вызовом на accept() возникает слишком большая задержка. Затем вы захотите изменить цикл accept() таким образом, чтобы он имел меньше накладных расходов.

В вашем случае, я предполагаю, что self.q это питон очередь , и в этом случае вы можете позвонить self.q.put_nowait(), чтобы избежать любой возможности блокировки 1020 * цикл при этом вызове.

8 голосов
/ 15 марта 2010

Док скажи это

socket.listen(backlog) Прослушать соединения сделаны к розетке. Аргумент backlog указывает максимум количество соединений в очереди и должно быть не менее 1; максимум значение зависит от системы (обычно 5).

Очевидно, что системное значение больше 5 в вашей системе. Я не понимаю, почему установка большего числа будет проблемой. Возможно, некоторая память зарезервирована для каждого соединения в очереди.

На моей man-странице Linux написано

Если аргумент отставания больше значения в / proc / sys / net / core / somaxconn, то это молча обрезается до этого значения; значение по умолчанию в этом файл - 128. В ядрах до 2.4.25 это ограничение было жестко закодированным значением, SOMAXCONN, со значением 128.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...