Ответы пользователя по тегу Многопоточность
  • Как получать вывод subprocess.run() во время выполнения?

    import subprocess
    
    # Run the program and capture its output
    process = subprocess.Popen(['program', 'arg1', 'arg2'], stdout=subprocess.PIPE)
    
    # Read the output of the program in real-time
    while True:
        output = process.stdout.readline()
        if output == b'' and process.poll() is not None:
            break
        if output:
            print(output.strip())
    
    # Print the return code of the program
    print(process.returncode)
    Ответ написан
    Комментировать
  • Почему без GIL в Python подсчёт ссылок НЕ является безопасным?

    Насчет механизма подсчета ссылок и GIL подробно не расскажу, насколько я помню, он предотвращает ситуацию, когда два потока одновременно изменяют счетчик ссылок, что может привести к некорректным результатам.

    Также GIL используется для правильной работы структур list, dict, set. На примере работы list: https://habr.com/ru/post/273045/. Вставка элемента в позицию x требует смещения некоторых элементов списка, например, если мы хотим вставить элемент в середину списка, то перед вставкой интерпретатору нужно будет сдвинуть второю половину листа. Теперь представим ситуацию, есть список в котором 10 элементов, один поток хочет вставить элемент во второй индекс, а второй поток - в третий индекс. В этом случае потоки могут помешать друг другу и элементы сместятся не правильно.
    Ответ написан
    Комментировать