Как GIL вставляет прерванный поток и ожидающие потоки обратно в очередь готовности в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как GIL вставляет прерванный поток и ожидающие потоки обратно в очередь готовности в Python?

Сообщение Anonymous »

Контекст:
Я выполняю программу Python, которая создает 5 потоков следующим образом:

Код: Выделить всё

import time
from threading import Thread

def do_work(thread_number):
print(f"Starting thread {thread_number}")
time.sleep(1)
print(f"Ending thread {thread_number}")

for i in range(5):
t = Thread(target=do_work, args=(i,))
t.start()
И я получил следующие результаты, когда неоднократно наблюдал одну и ту же программу:
Выход 1:

Код: Выделить всё

Starting thread 0
Starting thread 1
Starting thread 2
Starting thread 3
Starting thread 4
Ending thread 1
Ending thread 0
Ending thread 4
Ending thread 3
Ending thread 2
Результат 2:

Код: Выделить всё

Starting thread 0
Starting thread 1
Starting thread 2
Starting thread 3
Starting thread 4
Ending thread 4
Ending thread 2
Ending thread 3
Ending thread 0
Ending thread 1
Результат 3:

Код: Выделить всё

Starting thread 0
Starting thread 1
Starting thread 2
Starting thread 3
Starting thread 4
Ending thread 4
Ending thread 1
Ending thread 3
Ending thread 2
Ending thread 0
Мой вопрос:
Из выходных данных ясно, что GIL возвращает прерванный поток последним в очереди ожидания.
И это причина, по которой начатый поток печатается первым каждый раз перед любым конечным потоком .
Но поскольку потоки выполняются по порядку, т. е. сначала 0-й, затем 1-й, затем 2-й,.... затем 4-й, и если они возвращаются в конец очереди готовности, почему они не заканчиваются в том же порядке?
Какие факторы меняют этот порядок?

Подробнее здесь: https://stackoverflow.com/questions/792 ... to-the-rea
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»