Найти - Пользователи
Полная версия: Многопоточные сетевые приложения замедляются после промежутка времени
Начало » Python для экспертов » Многопоточные сетевые приложения замедляются после промежутка времени
1 2 3
deye
Спасибо всем за такое внимание к моей проблеме

По делу:
Lexander,
Сколько вы говорите у вас потоков - 100 и более?
Да, обычно меньше 100 не использовал

Чтобы проверить эту гипотезу, проверьте время до замедления с разным количеством потоков.
Не очень понял что вы имеете ввиду? Если имеется ввиду зависимость влияния количества потоков на время замедления, то её я проверил и, как писал постом выше - она обратная: чем больше потоков - тем меньше времени проходит до замедления.

либо уменьшить количество потоков - этот вариант подойдет, если сетевой интерфейс нагружен на 50 и более процентов;
Проверил нагрузку сетевого интерфейса: как до замедления, так и после, сетевой интерфейс используется обычно не более чем на 5%

либо переписать код на multiprocessing, twisted, asyncore и т.п. вещах
Уже смотрю в сторону twisted, но не увидел в нём поддержки socks5. Только socks4, если не ошибаюсь

lorien,
для этого я и сделал Grab::Spider, чтобы сотни тредов или процессов не создавать.
Но Spider подойдёт только в целях работы с http. А моя проблема наблюдается и в случае работы с smtp


o7412369815963
либо переписать код на multiprocessing

На сколько процесс грузит ядро? если не сильно, например 50%, то от процессов не будет смысла.

ЗЫ: в качестве быстрого костыля можно сделать авто-перезагрузку процесса.
deye
Интересную вещь обнаружил сегодня.
Попробовал переделать многопоточное приложение, работающее с smtp, используя gevent.

В итоге всё работало отлично (скорость возможно даже чуть быстрее чем на потоках), памяти жрало ещё меньше, нагрузка сетевого интерфейса не поднималась выше 1%, НО после такого же промежутка времени, как у многопоточных приложений, скорость упала. Т.е. на 300 потоках скорость падала на 18 минуте, и на 300 гринлетах скорость также упала на 18 минуте.

Что это может значить?
Lexander
В свете вновь открывшихся фактов у меня еще 2 гипотезы:
1. стоит ограничение на сервере
2. стоит ограничение у провайдера
Это маловероятно (особенно, второе), но просто отложите себе в память.

Я все еще настаиваю на установке счетчиков и профилировании, чтобы понять где и на чем падает скорость.
o7412369815963
Lexander
1. стоит ограничение на сервере
2. стоит ограничение у провайдера
тоже об думал.
deye
скорость также упала
попробуйте для эксперимента запустить два или три таких параллельно,
кстати какой входящий трафик получается? это из локалки качается или из инета?
o7412369815963
также для эксперимента запустить второй процесс на 15минуте.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB