сон неблокирующих звонков - PullRequest
0 голосов
/ 13 сентября 2011

Я ищу оптимальное значение сна для получения данных из неблокирующего сокета.Например:

while True:
    data=s.recv(1024)
    if not data:
        time.sleep(10) #10ms
    else:
        pass #...

Отсутствие сна приведет к 100% -ной загрузке ЦП, поэтому есть идеи, как получить наилучшее использование ЦП и пропускную способность?Как долго длится сон, чтобы процессор мог переключать потоки?

Кстати, имеет ли смысл устанавливать буфер сокета через SO_SNDBUF / SO_RECVBUF и устанавливать TCP_NODELAY или они не должны объединяться?

Ответы [ 3 ]

3 голосов
/ 13 сентября 2011

Если вы планируете использовать sleep(), почему бы вам просто не использовать блокирующие сокеты?

2 голосов
/ 13 сентября 2011

Ты не должен делать это сам. Используйте вызов select с тайм-аутом, если вам нужно, чтобы ваш код периодически просыпался, даже если данные не были получены.

Кстати, TCP_NODELAY с отправляющей стороны, не повлияет на ваши read с.

1 голос
/ 13 сентября 2011

Использование select.Он в основном остановит программу и разбудит ее, когда в сокете появятся данные.

...