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

Тема: Как справится когда python thread locked?

  1. Как справится когда python thread locked?

    Ребята, столкнулся с такой проблемой: мой python thread locked и не могу понять, как дальше действовать. Запускаю мультипоточность, и кажется, что один из потокоав заблокировался, и весь процесс стопорится. Кто сталкивался с таким, помогите с примерами кода или идеями, как это можно дебажить и решать?



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

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

  3. Привет! В таких случаях обычно бывает, что один из потоков захватил лок (lock) и не отпускает его. Могу предложить следующее:

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

    lock 
    threading.Lock()

    def thread_function(name):
        print(
    f'Thread {name}: starting')
        
    with lock:
            print(
    f'Thread {name}: has the lock')
            
    # здесь какой-то код
            
    print(f'Thread {name}: releasing the lock')
        print(
    f'Thread {name}: finishing')

    threads = []
    for 
    i in range(3):
        
    threading.Thread(target=thread_functionargs=(i,))
        
    threads.append(t)
        
    t.start()

    for 
    t in threads:
        
    t.join() 
    Попробуй добавить такие логи в свой код для лучшего понимания, где именно поток застревает.

  4. Цитата Сообщение от OlegMountain
    Привет! В таких случаях обычно бывает, что один из потоков захватил лок (lock) и не отпускает его. Могу предложить следующее:

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

    lock 
    threading.Lock()

    def thread_function(name):
        print(
    f'Thread {name}: starting')
        
    with lock:
            print(
    f'Thread {name}: has the lock')
            
    # здесь какой-то код
            
    print(f'Thread {name}: releasing the lock')
        print(
    f'Thread {name}: finishing')

    threads = []
    for 
    i in range(3):
        
    threading.Thread(target=thread_functionargs=(i,))
        
    threads.append(t)
        
    t.start()

    for 
    t in threads:
        
    t.join() 
    Попробуй добавить такие логи в свой код для лучшего понимания, где именно поток застревает.
    Полезный пример кода, спасибо! Такие логи реально могут помочь отладить проблему.

  5. Если python thread locked это типичноиз-за deadlock. Обычно происходит, когда два потока ждут друг друга, держа при этом ресурсы, которые нужны другому потоку.
    Проверь, нет ли циклического ожидания.

  6. Цитата Сообщение от DustRider814
    Если python thread locked это типичноиз-за deadlock. Обычно происходит, когда два потока ждут друг друга, держа при этом ресурсы, которые нужны другому потоку.
    Проверь, нет ли циклического ожидания.
    Отлично подмечено, про deadlock сам забываю часто.

  7. Еще один вариант: попробуй использовать threading.Event вместо Lock. В некоторых сценариях это может помочь избежать блокировок.

  8. Цитата Сообщение от Андрей Валентинович
    Еще один вариант: попробуй использовать threading.Event вместо Lock. В некоторых сценариях это может помочь избежать блокировок.
    Интересная идея. Никогда не пробовал заменять Lock на Event.

  9. В твоем случае можно попробовать использовать модуль multiprocessing вместо threading, он лучше работает с python GIL и может помочь с этой проблемой.

  10. Цитата Сообщение от Kurban4891
    В твоем случае можно попробовать использовать модуль multiprocessing вместо threading, он лучше работает с python GIL и может помочь с этой проблемой.
    Да, multiprocessing правда может помочь, если проблема в GIL.

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