🕷️ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 91 (from laksa176)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

ℹ️ Skipped - page is already crawled

📄
INDEXABLE
CRAWLED
3 days ago
🤖
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0.1 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://otus.ru/nest/post/390/
Last Crawled2026-04-07 15:08:21 (3 days ago)
First Indexed2018-10-08 11:56:13 (7 years ago)
HTTP Status Code200
Meta TitleКак проще всего избежать ограничений GIL? | OTUS
Meta DescriptionКак проще всего избежать ограничений GIL? в OTUS, только интересные посты!
Meta Canonicalnull
Boilerpipe Text
Теги: python, gil, global interpreter lock, multiprocessing, fork, read-only кэш, copy-on-write, top, ps, rss, vms, reference counting, shared memory, mmap Многие из вас знают, что в Python есть GIL – Global Interpreter Lock , тот самый, который не даёт запускать несколько потоков и нагружать ядра процессора. Отчасти это так, но за GIL в Python скрывается очень много всего. И вот несколько фактов о нём: — GIL будет всегда. Но это не точно. — Захват GIL – одна из первых инструкций, которая выполняется в начале работы вашего кода. — Блокировка переключается каждые 100 инструкций байт-кода до версии 3.2. — Однако в Python до версии 3.2 у нас была возможность управлять этой цифрой. После – нет. — Всё потому, что в Python 3.2 и выше GIL был очень сильно переписан. Теперь блокировка переключается по времени. — Потоки соревнуются за захват GIL , у некоторых из них, например, тех, которые активно занимаются вводом\выводом, это получается чаще. — До версии 3.2 есть тонкости обработки сигналов при многопоточном коде – ваш код иногда может не получить сигнал от ОС. — Планированием выполнения потоков занимается ОС, а Python только говорит ей, как ему бы хотелось. — Вы можете обойти ограничения в своём коде при помощи multiprocessing. — Или написав своё Python C Extension. Рассмотрим один из самых очевидных способов избежать ограничений GIL ’а при выполнении CPU-intensive задач. Модуль multiprocessing Запускай по процессу на ядро и вперёд! К сожалению, очевидный способ не значит, что простой. Допустим, запускается процесс, который fork ’ает дочерний процесс, но перед этим загружает в память какой-нибудь большой read-only кэш , необходимый этим процессам для функционирования. Вот это класс! Казалось бы, за счёт copy-on-write (предполагаем Linux) оба процесса будут видеть один и тот же кэш, но дублировать его в памяти не придётся. В top (ну или ps ) увидим, что у процессов RSS ( Resident Set Size ) меньше VMS ( Virtual Memory Size ). А если кто-то из них и решит туда записать, то ОС скопирует в его адресное пространство только нужные страницы. Всё так, но есть нюансы В Python управление памятью осуществляется с помощью reference counting . И даже простой цикл по списку, например, вызывает увеличение счётчика ссылок находящихся в нём объектов. То есть, скорее всего, наш большой кэш не останется надолго в общей памяти, а быстро скопируется в адресные пространства процессов. Чтобы этого избежать нужно положить кэш в shared memory , то есть разделяемую память, которая является общей для обоих процессов. Multiprocessing даёт нам такую возможность, но выбор опций достаточно скудный: можно создать одно значение или массив. Для чего-то более сложного придётся использовать mmap , но программировать это будет ещё сложнее. Есть вопрос? Напишите в комментариях!
Markdown
![](https://vk.com/rtrg?p=VK-RTRG-410987-bLXUv) ![Top.Mail.Ru](https://top-fwz1.mail.ru/counter?id=3316675;js=na) \> Скидка 10% на курсы из спецкаталога — до 19 апреля Скидка 10% на курсы из спецкаталога — до 19 апреля [Выбрать курс](https://otus.ru/catalog/courses?utm_source=banner_course%20&utm_medium=chank&utm_campaign=general_site&utm_content=tayshie_skidki&utm_term=05-04-2026-19-04-2026) [![Logo](https://otus.ru/static/img/logos/logo-2022-without-text.svg)](https://otus.ru/) Обучение Направления [Программирование (115)](https://otus.ru/categories/programming/) [Архитектура (17)](https://otus.ru/categories/architecture/) [Data Science (27)](https://otus.ru/categories/data-science/) [Инфраструктура (59)](https://otus.ru/categories/operations/) [GameDev (6)](https://otus.ru/categories/gamedev/) [Безопасность (15)](https://otus.ru/categories/information-security-courses/) [Управление (44)](https://otus.ru/categories/marketing-business/) [Аналитика и анализ (25)](https://otus.ru/categories/analytics/) [Бизнес и продукт в IT (26)](https://otus.ru/categories/business-product/) [Импортозамещение (15)](https://otus.ru/categories/import-substitution/) [Тестирование (13)](https://otus.ru/categories/testing/) [Нейросети (11)](https://otus.ru/categories/neural_networks/) [IT без программирования (19)](https://otus.ru/categories/it-bez-programmirovanija/) [Корпоративные курсы (27)](https://otus.ru/categories/corporate/) События [Календарь запуска курсов](https://otus.ru/lessons/calendar/2026/) [Календарь мероприятий](https://otus.ru/events/near/) Другое [Специализации (13)](https://otus.ru/categories/spec/) [Подготовительные курсы (14)](https://otus.ru/categories/online/) [Подписка на курсы](https://otus.ru/subscription) [Проверьте свои знания](https://otus.ru/tests) OTUS рекомендует [![](https://cdn.otus.ru/media/public/59/36/59360345524945519b0ce36c515bfb2a.svg) ![](https://cdn.otus.ru/media/public/af/48/af48fcf685a649f8a486c864d52b8470.svg) Курс Скидка 15600 ₽ Технический директор / CTO 9 апреля , 2026 · 5 месяцев](https://otus.ru/lessons/cto/) Информация OTUS [О компании](https://otus.ru/about) [СМИ о нас](https://otus.ru/smi/) [OTUS Журнал](https://otus.ru/journal/) [OTUS Директ](https://direct.otus.ru/) [Сведения об образовательной организации](https://otus.ru/legal/common/) [Контактная информация](https://otus.ru/contacts/) Студентам [Отзывы](https://otus.ru/reviews) [Как выбрать курс](https://landing.otus.ru/about-otus) [Истории выпускников](https://landing.otus.ru/gallery) [Наши преподаватели](https://otus.ru/instructors/) [Наши партнеры](https://otus.ru/employers/all/) [Программа лояльности](https://otus.ru/about/loyalty/) [Вопросы и ответы](https://otus.ru/faq/) Преподавателям [Стать преподавателем](https://otus.ru/teach/) [Наши преподаватели](https://otus.ru/instructors/) [База знаний](https://otus.ru/nest/dlja-prepodavatelej/) OTUS рекомендует [![](https://cdn.otus.ru/media/public/59/36/59360345524945519b0ce36c515bfb2a.svg) ![](https://cdn.otus.ru/media/public/af/48/af48fcf685a649f8a486c864d52b8470.svg) Курс Скидка 15600 ₽ Технический директор / CTO 9 апреля , 2026 · 5 месяцев](https://otus.ru/lessons/cto/) Ответим на ваши вопросы [\+7 499 938-92-02](<tel:+7 499 938-92-02>) [Компаниям](https://otus.ru/b2b) Зарегистрироваться Войти - Обучение - Информация - Компаниям Направления [Программирование (115)](https://otus.ru/categories/programming/) [Архитектура (17)](https://otus.ru/categories/architecture/) [Data Science (27)](https://otus.ru/categories/data-science/) [Инфраструктура (59)](https://otus.ru/categories/operations/) [GameDev (6)](https://otus.ru/categories/gamedev/) [Безопасность (15)](https://otus.ru/categories/information-security-courses/) [Управление (44)](https://otus.ru/categories/marketing-business/) [Аналитика и анализ (25)](https://otus.ru/categories/analytics/) [Бизнес и продукт в IT (26)](https://otus.ru/categories/business-product/) [Импортозамещение (15)](https://otus.ru/categories/import-substitution/) [Тестирование (13)](https://otus.ru/categories/testing/) [Нейросети (11)](https://otus.ru/categories/neural_networks/) [IT без программирования (19)](https://otus.ru/categories/it-bez-programmirovanija/) [Корпоративные курсы (27)](https://otus.ru/categories/corporate/) События [Календарь запуска курсов](https://otus.ru/lessons/calendar/2026/) [Календарь мероприятий](https://otus.ru/events/near/) Другое [Специализации (13)](https://otus.ru/categories/spec/) [Подготовительные курсы (14)](https://otus.ru/categories/online/) [Подписка на курсы](https://otus.ru/subscription) [Проверьте свои знания](https://otus.ru/tests) OTUS рекомендует [![](https://cdn.otus.ru/media/public/59/36/59360345524945519b0ce36c515bfb2a.svg) ![](https://cdn.otus.ru/media/public/af/48/af48fcf685a649f8a486c864d52b8470.svg) Курс Скидка 15600 ₽ Технический директор / CTO 9 апреля , 2026 · 5 месяцев](https://otus.ru/lessons/cto/) OTUS [О компании](https://otus.ru/about) [СМИ о нас](https://otus.ru/smi/) [OTUS Журнал](https://otus.ru/journal/) [OTUS Директ](https://direct.otus.ru/) [Сведения об образовательной организации](https://otus.ru/legal/common/) [Контактная информация](https://otus.ru/contacts/) Студентам [Отзывы](https://otus.ru/reviews) [Как выбрать курс](https://landing.otus.ru/about-otus) [Истории выпускников](https://landing.otus.ru/gallery) [Наши преподаватели](https://otus.ru/instructors/) [Наши партнеры](https://otus.ru/employers/all/) [Программа лояльности](https://otus.ru/about/loyalty/) [Вопросы и ответы](https://otus.ru/faq/) Преподавателям [Стать преподавателем](https://otus.ru/teach/) [Наши преподаватели](https://otus.ru/instructors/) [База знаний](https://otus.ru/nest/dlja-prepodavatelej/) OTUS рекомендует [![](https://cdn.otus.ru/media/public/59/36/59360345524945519b0ce36c515bfb2a.svg) ![](https://cdn.otus.ru/media/public/af/48/af48fcf685a649f8a486c864d52b8470.svg) Курс Скидка 15600 ₽ Технический директор / CTO 9 апреля , 2026 · 5 месяцев](https://otus.ru/lessons/cto/) Ответим на ваши вопросы [\+7 499 938-92-02](<tel:+7 499 938-92-02>) [Блоги](https://otus.ru/nest/ "Блоги") [Посты](https://otus.ru/nest/posts/ "Посты") [Лучшие](https://otus.ru/nest/best/ "Лучшие") [Участники](https://otus.ru/nest/users/ "Участники") [Блоги](https://otus.ru/nest/ "Блоги") [Посты](https://otus.ru/nest/posts/ "Посты") [Лучшие](https://otus.ru/nest/best/ "Лучшие") [Участники](https://otus.ru/nest/users/ "Участники") [Станислав](https://otus.ru/profile/2528/) 08\.10.18 в 09:39 # Как проще всего избежать ограничений GIL? [Python](https://otus.ru/nest/python/ "Python") → [Полезные материалы по Python](https://otus.ru/nest/python-art/ "Полезные материалы по Python") Теги: python, gil, global interpreter lock, multiprocessing, fork, read-only кэш, copy-on-write, top, ps, rss, vms, reference counting, shared memory, mmap ![Python\_Deep\_8-5020-a10ed2.10\_site.png](https://cdn.otus.ru/media/public/a1/0e/Python_Deep_8-5020-a10ed2.10_site.png) Многие из вас знают, что в Python есть **GIL** – *Global Interpreter Lock*, тот самый, который не даёт запускать несколько потоков и нагружать ядра процессора. Отчасти это так, но за **GIL** в Python скрывается очень много всего.И вот несколько фактов о нём: — **GIL** будет всегда. Но это не точно. — Захват **GIL** – одна из первых инструкций, которая выполняется в начале работы вашего кода. — Блокировка переключается каждые 100 инструкций байт-кода до версии 3.2. — Однако в Python до версии 3.2 у нас была возможность управлять этой цифрой. После – нет. — Всё потому, что в Python 3.2 и выше **GIL** был очень сильно переписан. Теперь блокировка переключается по времени. — Потоки соревнуются за захват **GIL**, у некоторых из них, например, тех, которые активно занимаются вводом\\выводом, это получается чаще. — До версии 3.2 есть тонкости обработки сигналов при многопоточном коде – ваш код иногда может не получить сигнал от ОС. — Планированием выполнения потоков занимается ОС, а Python только говорит ей, как ему бы хотелось. — Вы можете обойти ограничения в своём коде при помощи multiprocessing. — Или написав своё Python C Extension. Рассмотрим один из самых очевидных способов избежать ограничений **GIL**’а при выполнении **CPU-intensive** задач. ## Модуль multiprocessing Запускай по процессу на ядро и вперёд! К сожалению, очевидный способ не значит, что простой. Допустим, запускается процесс, который **fork**’ает дочерний процесс, но перед этим загружает в память какой-нибудь большой **read-only кэш**, необходимый этим процессам для функционирования. Вот это класс! Казалось бы, за счёт **copy-on-write** (предполагаем Linux) оба процесса будут *видеть* один и тот же кэш, но дублировать его в памяти не придётся. В **top** (ну или **ps**) увидим, что у процессов **RSS** (*Resident Set Size*) меньше **VMS** (*Virtual Memory Size*). А если кто-то из них и решит туда записать, то ОС скопирует в его адресное пространство только нужные страницы. ## Всё так, но есть нюансы В Python управление памятью осуществляется с помощью **reference counting**. И даже простой цикл по списку, например, вызывает увеличение счётчика ссылок находящихся в нём объектов. То есть, скорее всего, наш большой кэш не останется надолго в общей памяти, а быстро скопируется в адресные пространства процессов. Чтобы этого избежать нужно положить кэш в **shared memory**, то есть разделяемую память, которая является общей для обоих процессов. **Multiprocessing** даёт нам такую возможность, но выбор опций достаточно скудный: можно создать одно значение или массив. Для чего-то более сложного придётся использовать **mmap**, но программировать это будет ещё сложнее. *Есть вопрос? Напишите в комментариях\!* Поделиться 8 [0](https://otus.ru/nest/post/390/#comments) 63 Автор [Станислав](https://otus.ru/profile/2528/) Рейтинг: \+300 3229 дней Похожие посты [Get ready to run back: ещё одна проблема регулярных выражений](https://otus.ru/nest/post/140/ "Get ready to run back: ещё одна проблема регулярных выражений") [0](https://otus.ru/nest/post/140/#comments) [\+18](https://otus.ru/nest/post/140/#author_block) [MergeSort + InsertionSort + хитрые эвристики = ?](https://otus.ru/nest/post/144/ "MergeSort + InsertionSort + хитрые эвристики = ?") [0](https://otus.ru/nest/post/144/#comments) [\+13](https://otus.ru/nest/post/144/#author_block) [Подводный камень в Default-настройках СУБД](https://otus.ru/nest/post/149/ "Подводный камень в Default-настройках СУБД") [1](https://otus.ru/nest/post/149/#comments) [\+19](https://otus.ru/nest/post/149/#author_block) [Расстояние Вассерштейна: WGAN и 2 кучи земли](https://otus.ru/nest/post/182/ "Расстояние Вассерштейна: WGAN и 2 кучи земли") [0](https://otus.ru/nest/post/182/#comments) [\+11](https://otus.ru/nest/post/182/#author_block) [Adversarial Autoencoders: порождение дискретных объектов](https://otus.ru/nest/post/183/ "Adversarial Autoencoders: порождение дискретных объектов") [0](https://otus.ru/nest/post/183/#comments) [\+15](https://otus.ru/nest/post/183/#author_block) 0 комментариев Для комментирования необходимо [авторизоваться](https://otus.ru/login/?next=https%3A%2F%2Fotus.ru%2Fnest%2Fpost%2F390%2F) Популярное Сегодня тут пусто Посещая наш сайт, вы принимаете [политику использования cookie-файлов](https://otus.ru/legal/cookie/) ОК [О нас](https://otus.ru/about "О нас") [СМИ о нас](https://otus.ru/smi/ "СМИ о нас") [Отзывы](https://otus.ru/reviews "Отзывы") [Контакты](https://otus.ru/contacts/ "Контакты") [Блог](https://otus.ru/journal/ "Блог") [FAQ](https://otus.ru/faq/ "FAQ") [Канал в Telegram](https://ttttt.me/Otusjava) [Группа в Telegram](https://ttttt.me/joinchat/JMakp0NXc-L8nNneHCtx7A) [Корпоративное обучение](https://otus.ru/b2b "Корпоративное обучение") [Каталог курсов](https://otus.ru/lessons/ "Каталог курсов") [Программы лояльности](https://otus.ru/about/loyalty/ "Программы лояльности") [Каталог профессий](https://otus.ru/professions/ "Каталог профессий") [Наши партнеры](https://otus.ru/employers/all/ "Наши партнеры") [Стать преподавателем](https://otus.ru/teach/ "Стать преподавателем") Подписка на новости IT, анонсы открытых уроков, спец. предложения По всем вопросам пишите на [help@otus.ru](mailto:help@otus.ru "help@otus.ru") [Сведения об образовательной организации](https://otus.ru/legal/common/ "Сведения об образовательной организации") [OTUS является аккредитованной IT-компанией](https://otus.ru/legal/it_company_accreditation/ "OTUS является аккредитованной IT-компанией") [Сведения о рекомендательных технологиях](https://otus.ru/legal/recommendations/ "Сведения о рекомендательных технологиях") [В реестре отечественного ПО №24216](https://reestr.digital.gov.ru/reestr/2704482/ "В реестре отечественного ПО №24216") © 2015-2026 OTUS [Условия использования сервиса](https://otus.ru/legal/terms/ "Условия использования сервиса") Премия Рунета 2018 Премия Рунета 2018 Подписка на новости IT, анонсы открытых уроков, спец. предложения По всем вопросам пишите на [help@otus.ru](mailto:help@otus.ru "help@otus.ru") [Сведения об образовательной организации](https://otus.ru/legal/common/ "Сведения об образовательной организации") [OTUS является аккредитованной IT-компанией](https://otus.ru/legal/it_company_accreditation/ "OTUS является аккредитованной IT-компанией") [Сведения о рекомендательных технологиях](https://otus.ru/legal/recommendations/ "Сведения о рекомендательных технологиях") [В реестре отечественного ПО №24216](https://reestr.digital.gov.ru/reestr/2704482/ "В реестре отечественного ПО №24216") [Канал в Telegram](https://ttttt.me/Otusjava) [Группа в Telegram](https://ttttt.me/joinchat/JMakp0NXc-L8nNneHCtx7A) [Корпоративное обучение](https://otus.ru/b2b "Корпоративное обучение") [Каталог курсов](https://otus.ru/lessons/ "Каталог курсов") [Программы лояльности](https://otus.ru/about/loyalty/ "Программы лояльности") [Каталог профессий](https://otus.ru/professions/ "Каталог профессий") [Наши партнеры](https://otus.ru/employers/all/ "Наши партнеры") [Стать преподавателем](https://otus.ru/teach/ "Стать преподавателем") [О нас](https://otus.ru/about "О нас") [СМИ о нас](https://otus.ru/smi/ "СМИ о нас") [Отзывы](https://otus.ru/reviews "Отзывы") [Контакты](https://otus.ru/contacts/ "Контакты") [Блог](https://otus.ru/journal/ "Блог") [FAQ](https://otus.ru/faq/ "FAQ") © 2015-2026 OTUS [Пользовательское соглашение](https://otus.ru/legal/terms/ "Пользовательское соглашение") Премия Рунета 2018 Премия Рунета 2018 Восстановление пароля ![](https://mc.yandex.ru/watch/34531570) ![](https://mc.yandex.ru/watch/82755226) ![](https://mc.yandex.ru/watch/93715742) ![](https://happy.otus.ru/pixel/otus.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWZlcmVyIjoiaHR0cHM6Ly9vdHVzLnJ1L25lc3QvcG9zdC8zOTAvP3V0bV9zb3VyY2U9dHlwZWluJnV0bV9tZWRpdW09ZGlyZWN0JnV0bV9jYW1wYWlnbj1Ob25lIn0.NNrIL-Zj0177S-mAWX9CwAesDaFj-7ysWsaHDwnesqM)
Readable Markdown
Теги: python, gil, global interpreter lock, multiprocessing, fork, read-only кэш, copy-on-write, top, ps, rss, vms, reference counting, shared memory, mmap ![Python\_Deep\_8-5020-a10ed2.10\_site.png](https://cdn.otus.ru/media/public/a1/0e/Python_Deep_8-5020-a10ed2.10_site.png) Многие из вас знают, что в Python есть **GIL** – *Global Interpreter Lock*, тот самый, который не даёт запускать несколько потоков и нагружать ядра процессора. Отчасти это так, но за **GIL** в Python скрывается очень много всего.И вот несколько фактов о нём: — **GIL** будет всегда. Но это не точно. — Захват **GIL** – одна из первых инструкций, которая выполняется в начале работы вашего кода. — Блокировка переключается каждые 100 инструкций байт-кода до версии 3.2. — Однако в Python до версии 3.2 у нас была возможность управлять этой цифрой. После – нет. — Всё потому, что в Python 3.2 и выше **GIL** был очень сильно переписан. Теперь блокировка переключается по времени. — Потоки соревнуются за захват **GIL**, у некоторых из них, например, тех, которые активно занимаются вводом\\выводом, это получается чаще. — До версии 3.2 есть тонкости обработки сигналов при многопоточном коде – ваш код иногда может не получить сигнал от ОС. — Планированием выполнения потоков занимается ОС, а Python только говорит ей, как ему бы хотелось. — Вы можете обойти ограничения в своём коде при помощи multiprocessing. — Или написав своё Python C Extension. Рассмотрим один из самых очевидных способов избежать ограничений **GIL**’а при выполнении **CPU-intensive** задач. ## Модуль multiprocessing Запускай по процессу на ядро и вперёд! К сожалению, очевидный способ не значит, что простой. Допустим, запускается процесс, который **fork**’ает дочерний процесс, но перед этим загружает в память какой-нибудь большой **read-only кэш**, необходимый этим процессам для функционирования. Вот это класс! Казалось бы, за счёт **copy-on-write** (предполагаем Linux) оба процесса будут *видеть* один и тот же кэш, но дублировать его в памяти не придётся. В **top** (ну или **ps**) увидим, что у процессов **RSS** (*Resident Set Size*) меньше **VMS** (*Virtual Memory Size*). А если кто-то из них и решит туда записать, то ОС скопирует в его адресное пространство только нужные страницы. ## Всё так, но есть нюансы В Python управление памятью осуществляется с помощью **reference counting**. И даже простой цикл по списку, например, вызывает увеличение счётчика ссылок находящихся в нём объектов. То есть, скорее всего, наш большой кэш не останется надолго в общей памяти, а быстро скопируется в адресные пространства процессов. Чтобы этого избежать нужно положить кэш в **shared memory**, то есть разделяемую память, которая является общей для обоих процессов. **Multiprocessing** даёт нам такую возможность, но выбор опций достаточно скудный: можно создать одно значение или массив. Для чего-то более сложного придётся использовать **mmap**, но программировать это будет ещё сложнее. *Есть вопрос? Напишите в комментариях\!*
Shard91 (laksa)
Root Hash10530217490906537691
Unparsed URLru,otus!/nest/post/390/ s443