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

Тема: Почему python threading killed мои треды?

  1. Почему python threading killed мои треды?

    Ребят, всем хай! Хочу спросить насчёт threading в Python. Настроил треды в своём проекте для обработки данных в фоне, всё круто бежало сначала. Но постоянно натыкаюсь на баги, треды просто убиваются, и фиг его знает почему. Кто-нибудь сталкивался с такой бедой? Как с этим бороться? Код типичный: запускаю треды с помощью threading.Thread(). Прошу, помогите, а то уже мозг кипит от этих багов!



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

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

  3. Йо! Треды в Python вообще та ещё головоломка. Первый совет - смотри, может, у тебя GIL (Global Interpreter Lock) что-то мутишь. Это напрямую влияет на выполнение тредов. Вот пример, как запускать базовый тред:

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

    import time

          
    def my_thread
    ():

        
    time.sleep(2)

        print(
    'Тред завершён')

          
    threading.Thread(target=my_thread)

    t.start()

    t.join()

    print(
    'Все треды завершены'
    Если треды вдруг убиваются, может, проблема в процессе main? Или чутка усложнённая логика внутри тредов? Проверь!

  4. Цитата Сообщение от Scaramouche
    Йо! Треды в Python вообще та ещё головоломка. Первый совет - смотри, может, у тебя GIL (Global Interpreter Lock) что-то мутишь. Это напрямую влияет на выполнение тредов. Вот пример, как запускать базовый тред:

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

    import time

          
    def my_thread
    ():

        
    time.sleep(2)

        print(
    'Тред завершён')

          
    threading.Thread(target=my_thread)

    t.start()

    t.join()

    print(
    'Все треды завершены'
    Если треды вдруг убиваются, может, проблема в процессе main? Или чутка усложнённая логика внутри тредов? Проверь!
    Крутой совет насчет GIL. Но мне кажется, проблема здесь еще глубже. Что думаешь насчет использования Queue для синхронизации?

  5. Привет! У меня тоже были проблемы с этим недавно. Возможно, в t.join() не хватает timeout. Вот пример использования:

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

        import time

      
        def worker
    ():

            
    time.sleep(2)

            print(
    'Работа завершена')

      
        
    thread threading.Thread(target=worker)

        
    thread.start()

        
    thread.join(timeout=3)

        if 
    thread.is_alive():

            print(
    'Тред все еще активен')

        else:

            print(
    'Тред завершился'
    Проверь, не должно ли твой тред завершаться раньше времени.

  6. Цитата Сообщение от Муми-Тролль
    Привет! У меня тоже были проблемы с этим недавно. Возможно, в t.join() не хватает timeout. Вот пример использования:

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

        import time

      
        def worker
    ():

            
    time.sleep(2)

            print(
    'Работа завершена')

      
        
    thread threading.Thread(target=worker)

        
    thread.start()

        
    thread.join(timeout=3)

        if 
    thread.is_alive():

            print(
    'Тред все еще активен')

        else:

            print(
    'Тред завершился'
    Проверь, не должно ли твой тред завершаться раньше времени.
    Интересное замечание про времени в t.join(). Да, это может конкретно рулить.

  7. Ух, у меня тоже были такие траблы. Чекнул треды с logging и оказалось, что ошибка происходит из-за Exception внутри тредов. Добавил try/except, и стало лучше. Пример кода:

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

    import time

        
    def my_thread
    ():

        try:

            
    time.sleep(2)

            print(
    'Тред завершён')

        
    except Exception as e:

            print(
    f'Ошибка: {e}')

                  
    threading.Thread(target=my_thread)

    t.start()

    t.join()

    print(
    'Все треды завершены'
    Hope это поможет ;-)

  8. Цитата Сообщение от WonderWoman
    Ух, у меня тоже были такие траблы. Чекнул треды с logging и оказалось, что ошибка происходит из-за Exception внутри тредов. Добавил try/except, и стало лучше. Пример кода:

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

    import time

        
    def my_thread
    ():

        try:

            
    time.sleep(2)

            print(
    'Тред завершён')

        
    except Exception as e:

            print(
    f'Ошибка: {e}')

                  
    threading.Thread(target=my_thread)

    t.start()

    t.join()

    print(
    'Все треды завершены'
    Hope это поможет ;-)
    Йо, прикольная идея с try/except. Логи могут сильно помочь в отладке.

  9. Хей! Только пару мыслей: может, у тебя память улетает или слишком много тредов сразу? Попробуй сократить их количество или сделать пайплайн через multiprocessing. Это часто помогает, когда большой объём задач. И не забудь про контроль времени выполнения каждого треда.

  10. Цитата Сообщение от ViktorMountain
    Хей! Только пару мыслей: может, у тебя память улетает или слишком много тредов сразу? Попробуй сократить их количество или сделать пайплайн через multiprocessing. Это часто помогает, когда большой объём задач. И не забудь про контроль времени выполнения каждого треда.
    Годнотища! Если проблема памяти, multiprocessing - топчик.

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