Форум сайта python.su
0
Как можно убить все запущенные потоки не дожидаясь окончания какого то действия ?
Каждый поток работает довольно долго из-за скачки по сети, поэтому вызвать исключение или выход из него никак.
Как только в одном из потоков появляется требуем условие, то 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)
Офлайн
14
Неправильная постановка вопроса.
Поток сам должен знать, продолжать ли ему работу или быстро прекратиться.
Например, ждать с таймаутом и проверять свой флажок.
Убивание снаружи невозможно сделать безопасным.
Офлайн
0
jartasaАга убей главный и останутся у тебя зомби. Вообще, ни метод на даже сама постановка задачи в корне не верная.
Я бы конечно мог убить главный поток
Офлайн
0
alexx11впринцепе с учотом оговорок – решение может состоянить именно в убивании главной нити..
Ага убей главный и останутся у тебя зомби. Вообще, ни метод на даже сама постановка задачи в корне не верная.
Отредактировано (Авг. 23, 2010 15:26:32)
Офлайн
0
tmp_a6367100Любой поток может общаться друг с другом, при желании ессно.
потомучто Python принципиально игнорирует возможность ядра-Linux посылать сигналы к неглавным-нитям!
tmp_a6367100никто не говорит что убить нельзя, просто это делают только те кто программирует так же как и пишут - с ошибками.
какие условия для убийств нужны?
Офлайн
0
alexx11общение – общению разнь !!tmp_a6367100Любой поток может общаться друг с другом, при желании ессно.
потомучто Python принципиально игнорирует возможность ядра-Linux посылать сигналы к неглавным-нитям!
alexx11не факт что специалисты по гуманитарным наукам (которые НЕ делают ошибок в правописании. вы на них намекаете?) – используют корректные способы программирования. возможно как-раз ИМЕННО ОНИ-ТО вот так и поступают..
никто не говорит что убить нельзя, просто это делают только те кто программирует так же как и пишут - с ошибками.
Офлайн
0
tmp_a6367100Нитью называют потоки только те кто хотят выделится, и блеснуть знанием английского, вторая волна в журналистике. А тем временем “поток” уже прочно прижился в русском языке, пример многопоточность.
там где подразумевается смысл “нить”
tmp_a6367100Не факт, только при чём это.alexx11не факт что специалисты по гуманитарным наукам (которые НЕ делают ошибок в правописании. вы на них намекаете?) – используют корректные способы программирования
написал:
никто не говорит что убить нельзя, просто это делают только те кто программирует так же как и пишут - с ошибками.
tmp_a6367100Ну и самое интересное. Записать, закрыть файлы, сообщить всем пайпам, вскипятить чайник, отправить смс, …и много другое что было в деструкторе. И unix задумался, может не надо было его убивать :) Я сомневаюсь что там блок finally выполнится.
…а далее нить аккуратненько бы завершила своё действие (не забыв выполнить все диструкторы ранее инициализированных переменных)
Офлайн
0
alexx11нато оно исключение и нужно, чтобы выполнились все блоки finally :-) :-)
… Я сомневаюсь что там блок finally выполнится.
Офлайн
0
вот видимо нужная системная функция:
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)
Офлайн
0
tmp_a6367100Уж точно, нельзя! Только это ты себя убеждаешь? =)
а если блок finally (и деструкторы переменных) – не будут выполнены – то это уже нельзя называть аккуратным завершением
Офлайн