Форум сайта python.su
Всем доброго времени.
Проблема вот в чём, необходимо иметь возможность принудительно закрыть поток.
Например, имеем:
t = threading.Thread(target=func, args = (name, other))
t.start()
но функция func выполняет большую, долгую однодискретную (флаги завершения читать не может) операцию. Как его принудительно убить?
Спасибо.
Офлайн
Поток извне убить нельзя. Выставляйте какой-нибудь флаг, который поток внутри будет проверять и в случае его установки - закроется.
Офлайн
функция func выполняет большую, долгую однодискретную (флаги завершения читать не может) операциюА если поток завис? или пошёл сбой и он идёт не так и не может флаг читать?
Офлайн
А если поток завис то разработчик… неправ :).
Функцию нужно переписывать.
Офлайн
хорошо, поток заключается в форматировании диска, причём средствами ос. запускается форматирование и пока не закончит флаг не прочитает. Как прерываем?
Офлайн
spirits251) Использовать неблокирующие методы.
хорошо, поток заключается в форматировании диска, причём средствами ос. запускается форматирование и пока не закончит флаг не прочитает. Как прерываем?
Офлайн
хм…)) а смысл обрывать поток, если форматирование как то не оборвётся? нужно чтобы файлики перестали исчезать.
o7412369815963Это сейчас и делаю=)
Вынести обработку в отдельный процесс
Офлайн
кстати, зачем форматирование в отдельный поток? пул многопоточного форматирования?
если блокирующий метод будет в основном потоке, то прервать его можно через сигналы http://docs.python.org/library/signal.html
а в линуксе я бы делал форматирование вызовом специализированной nix-овой утилиты через subprocess, он имеет неблокирующий методы взаимодействия.
Офлайн
o7412369815963это просто пример.
зачем форматирование в отдельный поток
o7412369815963какой именно?
специализированной nix-овой утилиты
Офлайн
spirits25ну для форматирования например mkfs, и ничего дополнительно к питону ставить не надоo7412369815963какой именно?
специализированной nix-овой утилиты
Офлайн