Нещодавно з’явилася новина про те, що Керівний комітет проекту Python оголосив про своє бажання схвалити Пропозиція розширення мови Python «PEP-0703″, що робить глобальне блокування інтерпретатора необов’язковим у CPython і яке в основному визначає вбудовування режиму компіляції CPython без глобального блокування інтерпретатора (GIL).
ПЕП-0703 визначає припинення використання GIL за замовчуванням, але додайте параметр збірки «–sin-gil», щоб вимкнути його. Як справиl Очікується, що новий режим вирішить проблему з розпаралелюванням операцій у багатоядерних системах, спричинених тим, що глобальне блокування не дозволяє паралельний доступ до спільних об’єктів із різних потоків.
Зазначається, що в довгостроковій перспективі (через 5 років) Планується, що оболонку буде змінено за замовчуванням лише на глобальний режим без блокування, водночас припиняючи підтримку компіляції за допомогою GIL.
Дякуємо всім за відповідь на опитування про пропозицію без GIL. Зрозуміло, що загальні настрої позитивні, як щодо загальної ідеї, так і для PEP 703 зокрема. Рада директорів також в основному позитивно оцінює обидва. Ми маємо намір прийняти PEP 703, хоча ми ще опрацьовуємо деталі прийняття.
Як ми робили кілька разів у минулому, ми хочемо повідомити про свій намір прийняти PEP разом із нашими поточними міркуваннями щодо деталей, пов’язаних із прийняттям.
Крім того, Зазначається, що зміни, які планується здійснити в три етапи, які бувають короткостроковими, середньостроковими та довгостроковими. Враховуючи це на першому етапі відключення GIL за замовчуванням є недоцільним через накладні витрати, пов’язані зі змінами збирача сміття, системи керування пам’яттю та примітивів для організації блокувань. Наприклад, через використання підрахунку посилань для ізоляції потоків спостерігається падіння продуктивності для однопоточних скриптів (у наборі тестів pyperformance на 10%). У той же час може знадобитися відключення GIL в наукових обчисленнях, для яких відсутність розпаралелювання є більш серйозною проблемою, ніж лінійна швидкість виконання коду.
На другому етапі, в основному, буде очікуватися підтвердження. і що є достатня підтримка з боку громади, щоб використання "не-GIL є життєздатним" і переконайтеся, що збірка без GIL підтримується, але не за замовчуванням.
На останньому етапі no-GIL вже буде значенням за замовчуванням і будь-які залишки GIL буде видалено (без непотрібного порушення зворотної сумісності).
Помічено, що робота по відходу від GIL буде проводитися дуже обережно, щоб не повторити помилку що сталося при просуванні Python 3: збірка без GIL повинна забезпечити сумісність зі старими версіями Python, і будь-які сторонні зміни коду, необхідні для роботи зі збірками без GIL, також повинні працювати зі збірками GIL.
Немає планів перенумерувати версії на Python 4 для збірок без GIL, оскільки вони збережуть сумісність з ABI.
Протягом усього процесу нам (основним розробникам, а не лише SC) потрібно буде повторно оцінити прогрес і запропоновані часові рамки. Ми не хочемо, щоб це стало черговою десятирічною боротьбою за зворотну сумісність, і ми хочемо мати можливість скасувати PEP 703 і знайти інше рішення, якщо воно виявиться проблематичним, тому нам потрібно регулярно перевіряти, чи варто продовжувати роботу.
Ми сподіваємося, що це прояснить майбутнє PEP, оскільки ми розробляємо точні деталі прийняття. SC працюватиме над завершенням прийняття в найближчі тижні.
Перед повним переходом на збірки без GIL ми плануємо досягти повної підтримки спільноти для цих збірок, а також надати додаткові API C та API Python, щоб забезпечити безпечну багатопотоковість у існуючому коді.
Нарешті, як уже згадувалося, очікується, що перехід до третього етапу може відбутися щонайменше через 5 років, і ймовірною датою для PEP-0703 є вихід Python 3.13, запланований на наступну осінь.
Якщо ви є цікаво дізнатися про це більше, Ви можете перевірити деталі У наступному посиланні.