Форум сайта python.su
Ну и посмотрите http://mg.pov.lt/objgraph/ - с ним проще найти утечку.
Офлайн
А в каком случае может не произойти захват лока? Ну кроме случая, когда он захвачен другим потоком.
Насчёт очереди с результатами - спасибо, попробую.
Исходя из кода я все таки спрошу:
Вы уверены в этом?
И что правильно ловятся, с уничтожением объектов?
Офлайн
deyeИменно в этом случае и может.
А в каком случае может не произойти захват лока? Ну кроме случая, когда он захвачен другим потоком.
deyeИ убьет.
Но разве сборщик мусора не должен их убить?
deyeРезультат (память растет) противоречит этому предположению ;)
Ведь после завершения process_task никаких внешних ссылок не остаётся
Офлайн
Именно в этом случае и может.
И ваш последующий код сработает совсем не так, как вы того ожидаете.
Офлайн
Все так, но вы не проверяете захватился ли лок.
И не учитываете инертность файловой системы при операциях с файлами.
Офлайн
А как оценивается скорость работы? Запросы в секунду, еще что-то или вообще субъективно?
Просто, например, если считается общее количество заданий(запросов) и делится на время, то таймауты нескольких запросов сильно попортят значение задания/время.
Офлайн
Lexander, объясните, пожалуйста, что вы имеете ввиду под проверкой лока? Разве попытка захватить лок не есть проверка?
reclosedev, количество заданий в час. Таймауты в 20-30 секунд не особо будут влиять на статистику в таком случае. Тем более влиять практически на 1 порядок, как у меня
Отредактировано deye (Май 29, 2013 20:10:22)
Офлайн
Убрал использование локов, сделал очередь с результатами и один поток, который пишет данные из этой очереди -> Не помогло.
Кстати, возможно важную подробность забыл упомянуть: чем больше потоков, тем быстрее наступает время, после которого скорость падает. И время опять же будет всегда примерно одинаковым для одного и того же количества потоков.
Т.е. скажем если 100 потоков - скорость падает через 3 часа,
если 200 потоков - через 2 часа,
300 потоков - через час.
(данные для примера, не фактические)
Насчёт потребляемой памяти: с момента запуска до момента замедления (примерно 20 мин) употребление памяти увеличилось примерно на 5мб. Это серьёзно?
Отредактировано deye (Май 30, 2013 00:08:25)
Офлайн
deyelock.locked()
Lexander, объясните, пожалуйста, что вы имеете ввиду под проверкой лока?
deyeЭтот совет касался других проблем, которые я описал выше.
Убрал использование локов, сделал очередь с результатами и один поток, который пишет данные из этой очереди -> Не помогло.
deyeНет, это мало.
Насчёт потребляемой памяти: с момента запуска до момента замедления (примерно 20 мин) употребление памяти увеличилось примерно на 5мб. Это серьёзно?
Офлайн
Ещё можно попробовать вместо threading заюзать multiprocessing, ну и в любом случае 100 тредов-потоков это не очень прикольно, для этого я и сделал Grab::Spider, чтобы сотни тредов или процессов не создавать.
Офлайн