Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как на Python правильно остановить поток (threads stop thread)?

  1. Как на Python правильно остановить поток (threads stop thread)?

    Йо, ребята! У меня тут засада с потоками в Python. Разбирался как работают threads, но вот застрял на одном моменте. Как корректно остановить поток? Гугль говорит, что есть много способов, но я что-то не особо продвигаюсь. Может, у кого-то есть рабочий примерчик или советы? Был бы оч признателен!



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет. Чтобы остановить поток в Python, можно использовать флаг. К примеру:

    Программный код:
    import threading
    import time

    stop_thread 
    False\

    def thread_task():
        while 
    not stop_thread:
            print(
    'Работаю...')
            
    time.sleep(1)
        
    thread threading.Thread(target=thread_task)
    thread.start()

    # Через пять секунд остановим поток
    time.sleep(5)
    stop_thread True
    Так ты корректно попросишь поток завершиться, подав ему сигнал через флаг.

  4. Цитата Сообщение от kotko07
    Привет. Чтобы остановить поток в Python, можно использовать флаг. К примеру:

    Программный код:
    import threading
    import time

    stop_thread 
    False\

    def thread_task():
        while 
    not stop_thread:
            print(
    'Работаю...')
            
    time.sleep(1)
        
    thread threading.Thread(target=thread_task)
    thread.start()

    # Через пять секунд остановим поток
    time.sleep(5)
    stop_thread True
    Так ты корректно попросишь поток завершиться, подав ему сигнал через флаг.
    О, да, про флаг тему слышал, но код не встречал. Спасибо, братан!

  5. Здарова! Ещё можно использовать threading.Event. Пример:

    Программный код:
    import threading

    stop_event 
    threading.Event()

    def thread_task():
        while 
    not stop_event.is_set():
            print(
    'Работаю...')
            
    stop_event.wait(1)
        
    thread threading.Thread(target=thread_task)
    thread.start()

    # Через пять секунд подаем сигнал на остановку потока
    threading.Timer(5stop_event.set).start()\ 
    Попробуй этот вариант, он тоже довольно удобный.

  6. Цитата Сообщение от DoctorStrange
    Здарова! Ещё можно использовать threading.Event. Пример:

    Программный код:
    import threading

    stop_event 
    threading.Event()

    def thread_task():
        while 
    not stop_event.is_set():
            print(
    'Работаю...')
            
    stop_event.wait(1)
        
    thread threading.Thread(target=thread_task)
    thread.start()

    # Через пять секунд подаем сигнал на остановку потока
    threading.Timer(5stop_event.set).start()\ 
    Попробуй этот вариант, он тоже довольно удобный.
    Про Event не думал. Спасибо за инфу!

  7. Мужик, у меня был такой же трабл. Я юзал daemon threads. Они автоматически завершатся, когда основной поток умрет:

    Программный код:
    import threading
    import time

    def thread_task
    ():
        while 
    True:
            print(
    'Работаю...')
            
    time.sleep(1)
            
    thread threading.Thread(target=thread_task)
    thread.daemon True
    thread
    .start()

    # Основной поток умрет через 5 секунд
    time.sleep(5)\ 
    Но здесь нужно осторожно, потому что если основной поток умрет раньше времени, демоны тоже сгинут.

  8. Цитата Сообщение от ViktorMountain
    Мужик, у меня был такой же трабл. Я юзал daemon threads. Они автоматически завершатся, когда основной поток умрет:

    Программный код:
    import threading
    import time

    def thread_task
    ():
        while 
    True:
            print(
    'Работаю...')
            
    time.sleep(1)
            
    thread threading.Thread(target=thread_task)
    thread.daemon True
    thread
    .start()

    # Основной поток умрет через 5 секунд
    time.sleep(5)\ 
    Но здесь нужно осторожно, потому что если основной поток умрет раньше времени, демоны тоже сгинут.
    Про daemon штуку знал, но не юзал. Спасибо за варик!

  9. Йоу, если всё другое не сработает, можно жёстко убить поток, но это очи рискованно:

    Программный код:
    import threading
    import ctypes

    def thread_task
    ():
        while 
    True:
            print(
    'Работаю...')
            
    time.sleep(1)
            
    def stop_thread(thread):
        if 
    not thread.is_alive():
            return
        
    tid ctypes.c_long(thread.ident)
        
    res ctypes.pythonapi.PyThreadState_SetAsyncExc(tidctypes.py_object(SystemExit))
        if 
    res == 0:
            
    raise ValueError('Thread ID не найден')
        
    elif res 1:
            
    ctypes.pythonapi.PyThreadState_SetAsyncExc(tidNone)
            
    raise SystemError('PyThreadState_SetAsyncExc фэйл)')
            
    thread threading.Thread(target=thread_task)
    thread.start()
    time.sleep(5)
    stop_thread(thread)\ 
    Но лучше юзать флаги, меньше возни потом будет.

  10. Цитата Сообщение от ОстапБендер
    Йоу, если всё другое не сработает, можно жёстко убить поток, но это очи рискованно:

    Программный код:
    import threading
    import ctypes

    def thread_task
    ():
        while 
    True:
            print(
    'Работаю...')
            
    time.sleep(1)
            
    def stop_thread(thread):
        if 
    not thread.is_alive():
            return
        
    tid ctypes.c_long(thread.ident)
        
    res ctypes.pythonapi.PyThreadState_SetAsyncExc(tidctypes.py_object(SystemExit))
        if 
    res == 0:
            
    raise ValueError('Thread ID не найден')
        
    elif res 1:
            
    ctypes.pythonapi.PyThreadState_SetAsyncExc(tidNone)
            
    raise SystemError('PyThreadState_SetAsyncExc фэйл)')
            
    thread threading.Thread(target=thread_task)
    thread.start()
    time.sleep(5)
    stop_thread(thread)\ 
    Но лучше юзать флаги, меньше возни потом будет.
    Жёстко, но да, такой метод тоже есть. Не зря предупредил про риск!

Страница 1 из 2 12 ПоследняяПоследняя