SirAnthony 22.09.2011 09:34 home

Я что-то не понял, документация говорит, что треды-демоны работают после завершения программы. Стековерфлов говорит, что завершаются. Какой-то чувак говорит, что они просто теряют globals, что не такая уж и проблема. Что там на самом деле?

1. werehuman 22.09.2011 09:35 Psi+

треды работают после SIGTERM, но вырубаются на SIGQUIT и SIGKILL

2. SirAnthonywerehuman /1 22.09.2011 09:37 home

Т.е. смысла их вешать на скрипт который должен отдать данные и завершиться, отдав куски тредам на работу, нет? Да, я про daemon == True треды, чем они тогда отличаются от обычных?

3. werehumanSirAnthony /2 22.09.2011 09:38 Psi+

ЕМНИП нет отличий, они все работают как daemon == True

4. werehumanSirAnthony /2 22.09.2011 09:38 Psi+

отчего же, есть. Просто используй join

5. SirAnthonywerehuman /4 22.09.2011 09:40 home

И ждать, пока они завершатся, да. Я от этого и хочу избавиться.

6. werehumanSirAnthony /5 22.09.2011 09:40 Psi+

по-моему, тебе нужен http://docs.python.org/release/2.7/libra...

7. SirAnthonywerehuman /6 22.09.2011 09:52 home

скорее всего да. А из этой штуки можно определить, что спавнер завершился?

8. werehumanSirAnthony /7 22.09.2011 09:53 Psi+

гхм, как хочешь. Тебе всё-таки join нужен?

9. SirAnthonywerehuman /8 22.09.2011 09:54 home

Я просто думаю, как его убить хорошо, чтобы он не висел без дела после того, как все сделает. Архитектуропроблемы.

10. werehumanSirAnthony /9 22.09.2011 10:02 Psi+

тут уже задачка для ума и никаких штатных средств по завершению потоков ты не найдёшь ни в одном ЯП. Вообще, я не вижу никаких проблем добавить немного своей логики, но раз ты нашёл... Заведи в каждом треде переменную continue_working и проверяй её время от времени.

11. SirAnthonywerehuman /10 22.09.2011 10:12 home

Да нет, с запускаемыми форком тредами проблем нет. Суть задачи такова. Есть листер директории, идет по директории, если находит картинку, то делает тумбнейл, пользователю возвращается, что тумбнейл делается(он появится при обновлении). Задача создания тумбнейлов довольно трудоемка, поэтому я хочу выкинуть ее в треды. Как я это вижу сейчас: стартует манагер тредов, как форк. Туда сбрасываются данные о тумбнейлах, которые следует создать, он берет их из очереди и поддерживает определенное количество тредов(ибо лимит выходит боком на больших папках). Когда картинок больше не ожидается(основной процесс вышел), а все в очереди обработаны, то висеть смысла нет. В принципе, можно перед выходом слать форку флаг. Но придется тогда две мультипроцессных переменных держать, наверное так проще всего.

12. werehumanSirAnthony /11 22.09.2011 10:15 Psi+

ну про то, что треды в питоне — не треды, ты знаешь. Тебе нужен multiprocessing. И тебе нужен Queue. То есть каждый тред дёргает из очереди на обработку картинку, а если очередь пуста, то завершается. Элементарно же.

13. SirAnthonywerehuman /12 22.09.2011 10:16 home

Я вот и говорю, что с тредами проблем нет, проблема в том, как завершить тредманагер.

14. SirAnthonySirAnthony /13 22.09.2011 10:16 home

Который сделан мультипроцессингом.

16. SirAnthonywerehuman /15 22.09.2011 10:18 home

Я уже натыкал и реализацию нашел, где украсть.

17. SirAnthony 22.09.2011 10:24 home

Кстати, да, wsgi там решает все проблемы.

Do you really want to delete ?