Найти - Пользователи
Полная версия: Потоки (течёт память)
Начало » Python для новичков » Потоки (течёт память)
1
dll090
Здравствуйте,

Поискал тут, и в гугле и чёткого ответа не нашёл поэтому обращаюсь к вам.

Есть демон который периодически запускает очередь заданий (около 100-150ти) в несколько потоков (например в 10 потоков),
как только все потоки выполняют свои задания - демон засыпает на определённое время. - затем всё повторяется.

Почему не крон? - потому что так удобнее, т.к. неизвестно сколько времени будут выполнятся задания. (хотя я понимаю что можно решить эту проблему и при помощи крона)

Так вот, всё работает как и должно за исключением того что через сутки скрипт уже использует 1.5 Гб оперативки - память не освобождается.

Саму очередь делаю при помощи кода: http://code.activestate.com/recipes/577187/

Что я могу в принципе в коде делать не так как нужно? (судя по логам все треды завершают свою работу нормально)

Есть ли какие то рекомендации вообще в какую сторону смотреть?
Или может быть вообще не стоило делать это на потоках, а лучше например сделать через twisted асинхронно.

В общем дайте какую нибудь информацию к размышлению.
cookie-god
python memory profiling, узнайте чем заняты 1.5 гб
o7412369815963
ThreadPool один раз создаете или периодический?
dll090
cookie-god
Спасибо, посмотрю

o7412369815963

Получается при каждом запуске очереди, т.е. раз в сорок минут примерно.


while True:

pool = ThreadPool(concurrency=10)

for num, data in enumerate(srvs): #len(srvs) ~ 150
pool.add_task(run_command, something...)

pool.wait_completion()

sleep(минут на сорок)
Это что получается что питон не чистит весь мусор?
ну т.е. если я делаю
a = 'string'
a = 'string2'
память будет постоянно расти? (хм, надо проверить)
Или эти догадки не имеют ничего общего с реальностью.
o7412369815963
> Это что получается что питон не чистит весь мусор?
потому что это мусором ещё не является

в каждом цикле создается дополнительно +10 потоков, итого за сутки 24*60/40 * 10 = +360 потоков
pool = ThreadPool(concurrency=10) нужно вынести вне цикла
dll090
Да да я уже понял в ошибся, как перепишу, напишу о результате.
Спасибо.


UP

Хотя уже и так понятно было что поможет, но так как обещал - то пишу.

Вобщем вынес эту строку за цикл. 12 часов - 80 Мб.

Ещё раз спасибо.
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