Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2017 10:18:25

root1
Зарегистрирован: 2017-01-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как закрыть поток?

 class Thread(threading.Thread):
def run():
    while True:
          ........
class Main():
def foo(self):
    self.thread.start()

Как закрыть поток? self.daemon не подходит т.к поток не закрывает а только передает упровление, и всеравно не работает.
Python 3.*

Отредактировано root1 (Авг. 6, 2017 10:22:27)

Офлайн

#2 Авг. 6, 2017 14:01:31

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Как закрыть поток?

Встречал я когда-то на эту тему рассуждения, вот нашел.

Офлайн

#3 Авг. 6, 2017 22:30:59

root1
Зарегистрирован: 2017-01-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как закрыть поток?

     def __init__(self):
        super(StoppableThread, self).__init__()
        self._stop_event = threading.Event()
    def stop(self):
        self._stop_event.set()

Этот вариант у меня не работает.
It is generally a bad pattern to kill a thread abruptly, in Python and in any language. Think of the following cases:

the thread is holding a critical resource that must be closed properly
the thread has created several other threads that must be killed as well.

Мне в общем не надо нарушать правила, главное чтобы закрыть в котором вечный цикл. Сигнал есть возможность послать как с внешнего потока так и из нутри цикла. Только не один из нагугленых у меня не сработал. Когда пробывал закрывать поток с внешней стороны, получал сообщение о разнице потоков.

Офлайн

#4 Авг. 7, 2017 12:15:01

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как закрыть поток?

А чем не устраивает старый добрый способ с флагом в условии цикла?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Авг. 7, 2017 13:19:45

root1
Зарегистрирован: 2017-01-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как закрыть поток?

JOHN_16
А чем не устраивает старый добрый способ с флагом в условии цикла?
 if flag == True:
    return 0

Вот так получается не совсем правильно. Поток изменяется но выполнение после функции start() дальше не происходит. Как проверить закрыт ли поток?

Офлайн

#6 Авг. 8, 2017 05:21:33

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Как закрыть поток?

Вот тут Signaling Between Threads исчерпывающе. Лучше прочитать страницу целиком, это все что нужно знать о потоках.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Авг. 8, 2017 05:23:56)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version