SirAnthony
22.09.2011 09:34 home
Я что-то не понял, документация говорит, что треды-демоны работают после завершения программы. Стековерфлов говорит, что завершаются. Какой-то чувак говорит, что они просто теряют globals, что не такая уж и проблема. Что там на самом деле?
треды работают после SIGTERM, но вырубаются на SIGQUIT и SIGKILL
Т.е. смысла их вешать на скрипт который должен отдать данные и завершиться, отдав куски тредам на работу, нет? Да, я про daemon == True треды, чем они тогда отличаются от обычных?
ЕМНИП нет отличий, они все работают как daemon == True
отчего же, есть. Просто используй join
И ждать, пока они завершатся, да. Я от этого и хочу избавиться.
по-моему, тебе нужен http://docs.python.org/release/2.7/libra...
скорее всего да. А из этой штуки можно определить, что спавнер завершился?
гхм, как хочешь. Тебе всё-таки join нужен?
Я просто думаю, как его убить хорошо, чтобы он не висел без дела после того, как все сделает. Архитектуропроблемы.
тут уже задачка для ума и никаких штатных средств по завершению потоков ты не найдёшь ни в одном ЯП. Вообще, я не вижу никаких проблем добавить немного своей логики, но раз ты нашёл... Заведи в каждом треде переменную continue_working и проверяй её время от времени.
Да нет, с запускаемыми форком тредами проблем нет. Суть задачи такова. Есть листер директории, идет по директории, если находит картинку, то делает тумбнейл, пользователю возвращается, что тумбнейл делается(он появится при обновлении). Задача создания тумбнейлов довольно трудоемка, поэтому я хочу выкинуть ее в треды. Как я это вижу сейчас: стартует манагер тредов, как форк. Туда сбрасываются данные о тумбнейлах, которые следует создать, он берет их из очереди и поддерживает определенное количество тредов(ибо лимит выходит боком на больших папках). Когда картинок больше не ожидается(основной процесс вышел), а все в очереди обработаны, то висеть смысла нет. В принципе, можно перед выходом слать форку флаг. Но придется тогда две мультипроцессных переменных держать, наверное так проще всего.
ну про то, что треды в питоне — не треды, ты знаешь. Тебе нужен multiprocessing. И тебе нужен Queue. То есть каждый тред дёргает из очереди на обработку картинку, а если очередь пуста, то завершается. Элементарно же.
Я вот и говорю, что с тредами проблем нет, проблема в том, как завершить тредманагер.
Который сделан мультипроцессингом.
http://docs.python.org/release/2.7/libra...
Я уже натыкал и реализацию нашел, где украсть.
Кстати, да, wsgi там решает все проблемы.