Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 17, 2010 02:03:15

jartasa
От:
Зарегистрирован: 2009-09-20
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

Как можно убить все запущенные потоки не дожидаясь окончания какого то действия ?
Каждый поток работает довольно долго из-за скачки по сети, поэтому вызвать исключение или выход из него никак.
Как только в одном из потоков появляется требуем условие, то act становится ‘kill’ и нужно убить все потоки.
Я бы конечно мог убить главный поток, но его убивать нельзя, т.к после этого нужно выполнять ещё кое какие действия.
for i in xrange(count):
threadt = hreading.Thread(target=targ)
thread.start()
while threding.count()>1:
if act=='kill':
########kill all threads####
time.sleep(1);



Отредактировано (Авг. 17, 2010 02:03:58)

Офлайн

#2 Авг. 17, 2010 03:31:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Убить запущенные потоки.

Неправильная постановка вопроса.
Поток сам должен знать, продолжать ли ему работу или быстро прекратиться.
Например, ждать с таймаутом и проверять свой флажок.
Убивание снаружи невозможно сделать безопасным.



Офлайн

#3 Авг. 17, 2010 22:14:45

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

jartasa
Я бы конечно мог убить главный поток
Ага убей главный и останутся у тебя зомби. Вообще, ни метод на даже сама постановка задачи в корне не верная.



Офлайн

#4 Авг. 23, 2010 15:25:51

tmp_a6367100
От:
Зарегистрирован: 2010-08-23
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

alexx11
Ага убей главный и останутся у тебя зомби. Вообще, ни метод на даже сама постановка задачи в корне не верная.
впринцепе с учотом оговорок – решение может состоянить именно в убивании главной нити..

почему? потомучто Python принципиально игнорирует возможность ядра-Linux посылать сигналы к неглавным-нитям!

какие условия для убийств нужны? чтобы все побочные нити были ДЕМОНИЧЕСКИМИ, а сама программа чтобы была МУЛЬТИПРОЦЕССНОЙ



Отредактировано (Авг. 23, 2010 15:26:32)

Офлайн

#5 Авг. 23, 2010 16:54:42

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

tmp_a6367100
потомучто Python принципиально игнорирует возможность ядра-Linux посылать сигналы к неглавным-нитям!
Любой поток может общаться друг с другом, при желании ессно.
tmp_a6367100
какие условия для убийств нужны?
никто не говорит что убить нельзя, просто это делают только те кто программирует так же как и пишут - с ошибками.



Офлайн

#6 Авг. 23, 2010 17:23:00

tmp_a6367100
От:
Зарегистрирован: 2010-08-23
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

alexx11
tmp_a6367100
потомучто Python принципиально игнорирует возможность ядра-Linux посылать сигналы к неглавным-нитям!
Любой поток может общаться друг с другом, при желании ессно.
общение – общению разнь !!

при посылке сигнала (ните! что позваляет ядро-Linux) – действие текущей нити прекращается и управление моглобы перейти МГНОВЕННО в функцию, вызывающую исключение в данной ните…

…а далее нить аккуратненько бы завершила своё действие (не забыв выполнить все диструкторы ранее инициализированных переменных)

… но такую возможность СПЕЦИАЛЬНО не включили в Python … только лишь по причине того что посылка сигналов к отдельным нитям – специфична для ядра Linux. и тогдабы Пайтон потерял бы часть кросплатформенности

alexx11
никто не говорит что убить нельзя, просто это делают только те кто программирует так же как и пишут - с ошибками.
не факт что специалисты по гуманитарным наукам (которые НЕ делают ошибок в правописании. вы на них намекаете?) – используют корректные способы программирования. возможно как-раз ИМЕННО ОНИ-ТО вот так и поступают..

вы наверно давно не читали журналистской прессы.. если полагаете что журналисты, филологи, пейсатели, <…> – прям уж так гениальны в праграммировании



…и если уж заговорили про русский язык – то давайте НЕ будем говорить слово “поток” там где подразумевается смысл “нить” .
поток – это #include <stream> в C++

о том как безграмотные журналюги и пейсатели начали говорить слово “поток” – вам расскажет историческая наука в разделе про Microsoft :-/



Офлайн

#7 Авг. 23, 2010 19:23:19

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

tmp_a6367100
там где подразумевается смысл “нить”
Нитью называют потоки только те кто хотят выделится, и блеснуть знанием английского, вторая волна в журналистике. А тем временем “поток” уже прочно прижился в русском языке, пример многопоточность.
tmp_a6367100
alexx11
написал:

никто не говорит что убить нельзя, просто это делают только те кто программирует так же как и пишут - с ошибками.
не факт что специалисты по гуманитарным наукам (которые НЕ делают ошибок в правописании. вы на них намекаете?) – используют корректные способы программирования
Не факт, только при чём это.

tmp_a6367100
…а далее нить аккуратненько бы завершила своё действие (не забыв выполнить все диструкторы ранее инициализированных переменных)
Ну и самое интересное. Записать, закрыть файлы, сообщить всем пайпам, вскипятить чайник, отправить смс, …и много другое что было в деструкторе. И unix задумался, может не надо было его убивать :) Я сомневаюсь что там блок finally выполнится.



Офлайн

#8 Авг. 23, 2010 20:50:40

tmp_a6367100
От:
Зарегистрирован: 2010-08-23
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

alexx11
… Я сомневаюсь что там блок finally выполнится.
нато оно исключение и нужно, чтобы выполнились все блоки finally :-) :-)


а если блок finally (и деструкторы переменных) – не будут выполнены – то это уже нельзя называть аккуратным завершением :-D


как раз именно поэтому и существуют в ядре-Linux сигналы-для-нитей – чтобы можно было аккуратно завершать нити

…без сигналов-нитей – остаётся только Posix Thread Cancellation – и вот этот-механизм конешно же НЕ является аккаратным



Офлайн

#9 Авг. 23, 2010 23:27:57

tmp_a6367100
От:
Зарегистрирован: 2010-08-23
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

вот видимо нужная системная функция:
http://www.kernel.org/doc/man-pages/online/pages/man2/tkill.2.html

'''
TKILL(2) Linux Programmer's Manual TKILL(2)

NAME

tkill, tgkill - send a signal to a thread



'''

осталось разобраться с регистрацией Обработчика Сигналов внутри убиваемой Нити (чтобы Обработчик указывал на функцию пораждения исключения)

….и можно таким образом состряпать библиотеку для Пайтона, способную корректно_и_безопасно останавливать-и-разгружать Нити


вот только всё это даже не POSIX (не говоря уж о Windows)



Офлайн

#10 Авг. 24, 2010 03:06:23

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Убить запущенные потоки.

tmp_a6367100
а если блок finally (и деструкторы переменных) – не будут выполнены – то это уже нельзя называть аккуратным завершением
Уж точно, нельзя! Только это ты себя убеждаешь? =)
А если у тебя тред в дедлоке? Ух блин, ведь скоро 1 сентября.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version