πŸ•·οΈ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 18 (from laksa028)

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
15 days ago
πŸ€–
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0.5 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://pythontalk.olegtalks.ru/optional_gil_313
Last Crawled2026-04-06 19:09:15 (15 days ago)
First Indexed2025-07-24 16:22:01 (9 months ago)
HTTP Status Code200
Meta TitleGIL станСт Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² Python 3.13 β€” Teletype
Meta DescriptionGIL (ΠΎΠ½ ΠΆΠ΅ Global Interpreter Lock) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Python вСрсии 3.13. Пока эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ являСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ.
Meta Canonicalnull
Boilerpipe Text
GIL (ΠΎΠ½ ΠΆΠ΅ Global Interpreter Lock) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Python вСрсии 3.13. Пока эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ являСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ. ΠšΡ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ этот GIL? Π­Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ CPython для обСспСчСния выполнСния Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Python ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция Π’ Python 3.13 срСди ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ привнСсёт Ρ€Π΅ΠΆΠΈΠΌ свободных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, позволяя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция, ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±Π΅Ρ‚Π°-Π²Π΅Ρ€ΡΠΈΡŽ Python 3.13 здСсь . А Π²ΠΎ врСмя установки ΠΎΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Β«free threaded binaries(experimental)Β». ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GIL Π² Python 3.13 GIL Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Ссли ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ --disable-gil . Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ GIL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния PYTHON_GIL , которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Π² значСния 1 ΠΈ 0 соотвСтствСнно. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ доступна опция ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -X gil , которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Π² 0 (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½) ΠΈ 1 (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½). # v3.13 # GI ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ python3 -X gil=0 sample.py # GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ python3 -X gil=1 sample.py ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π»ΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ свободныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ( --disable-gil ) ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ: import sysconfig print(sysconfig.get_config_var("Py_GIL_DISABLED")) ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π»ΠΈΠ±ΠΎ 0 (GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½), Π»ΠΈΠ±ΠΎ 1 (GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½). GIL Vs No GIL Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ повлияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GIL. Π•ΡΡ‚ΡŒ простой скрипт ( gil.py ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа ΠΈ сравниваСт врСмя выполнСния Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΈ многопроцСссорном Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…. Запустим этот скрипт сначала с GIL, Π° Π·Π°Ρ‚Π΅ΠΌ Π±Π΅Π· GIL. import sys import sysconfig import math import time import threading import multiprocessing def compute_factorial(n): return math.factorial(n) # ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС def single_threaded_compute(n): for num in n: compute_factorial(num) print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.") # ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполннСниС def multi_threaded_compute(n): threads = [] # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² for num in n: thread = threading.Thread(target=compute_factorial, args=(num,)) threads.append(thread) thread.start() # Π–Π΄Ρ‘ΠΌ исполнСния всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² for thread in threads: thread.join() print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²") # ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ исполнСниС def multi_processing_compute(n): processes = [] # Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа for num in n: process = multiprocessing.Process(target=compute_factorial, args=(num,)) processes.append(process) process.start() # ОТидаСм исполнСниС всСх процСссов for process in processes: process.join() print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.") def main(): # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ print(f"ВСрсия Python: {sys.version}") # GIL Status status = sysconfig.get_config_var("Py_GIL_DISABLED") if status is None: print("GIL Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½") if status == 0: print("GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½") if status == 1: print("GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½") numlist = [100000, 200000, 300000, 400000, 500000] # ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС start = time.time() single_threaded_compute(numlist) end = time.time() - start print(f"ВрСмя исполнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ: {end:.2f} сСкунд") # ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС start = time.time() multi_threaded_compute(numlist) end = time.time() - start print(f"ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя исполнСния: {end:.2f} сСкунд") # ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ исполнСниС start = time.time() multi_processing_compute(numlist) end = time.time() - start print(f"ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ врСмя исполнСния: {end:.2f} сСкунд") if __name__ == "__main__": main() Running gil.py with GIL ВСрсия Python: 3.13.0b3 experimental free-threading build (tags/v3.13.0b3:7b41395, Jun 27 2024, 16:17:17) [MSC v.1940 64 bit (AMD64)] GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. ВрСмя исполнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ: 9.28 сСкунд Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя исполнСния: 4.86 сСкунд Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ врСмя исполнСния: 6.14 сСкунд Π—Π΄Π΅ΡΡŒ Ρƒ нас Ρ‚Ρ€Π΅Ρ‚ΡŒΡ Π±Π΅Ρ‚Π°-вСрсия Python 3.13 с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ свободными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΈ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½. Но самоС Π³Π»Π°Π²Π½ΠΎΠ΅ - ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сниТСниС скорости Π² многопроцСссорных ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. πŸ‘‰πŸ»ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° PythonTalk Π² Telegram πŸ‘ˆπŸ» πŸ‘¨πŸ»β€πŸ’»Π§Π°Ρ‚ PythonTalk Π² TelegramπŸ’¬ 🍩 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» 🫢 Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: GeekPython
Markdown
[About Teletype](https://teletype.in/about) [Join](https://teletype.in/login?redir=http://pythontalk.olegtalks.ru/optional_gil_313) [PythonTalk @pythontalk](https://pythontalk.olegtalks.ru/) September 6, 2024 # GIL станСт Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² Python 3.13 ![](https://img1.teletype.in/files/4e/b3/4eb357af-92b7-4366-ad12-4b5f8e86e1e3.jpeg) [GIL](https://teletype.in/@pythontalk/gil) (ΠΎΠ½ ΠΆΠ΅ Global Interpreter Lock) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Python вСрсии 3.13. Пока эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ являСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ. ΠšΡ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ этот GIL? Π­Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ CPython для обСспСчСния выполнСния Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Python ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ## Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция Π’ Python 3.13 срСди ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ привнСсёт Ρ€Π΅ΠΆΠΈΠΌ свободных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, позволяя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция, ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±Π΅Ρ‚Π°-Π²Π΅Ρ€ΡΠΈΡŽ Python 3.13 [здСсь](https://www.python.org/downloads/release/python-3130b3/). А Π²ΠΎ врСмя установки ΠΎΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Β«free threaded binaries(experimental)Β». ## ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GIL Π² Python 3.13 GIL Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Ссли ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `--disable-gil`. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ GIL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния `PYTHON_GIL`, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Π² значСния 1 ΠΈ 0 соотвСтствСнно. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ доступна опция ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки `-X gil`, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Π² 0 (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½) ΠΈ 1 (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½). ``` # v3.13 # GI ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ python3 -X gil=0 sample.py # GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ python3 -X gil=1 sample.py ``` ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π»ΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ свободныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ (`--disable-gil`) ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ: ``` import sysconfig print(sysconfig.get_config_var("Py_GIL_DISABLED")) ``` ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π»ΠΈΠ±ΠΎ 0 (GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½), Π»ΠΈΠ±ΠΎ 1 (GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½). ## GIL Vs No GIL Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ повлияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GIL. Π•ΡΡ‚ΡŒ простой скрипт (`gil.py`), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа ΠΈ сравниваСт врСмя выполнСния Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΈ многопроцСссорном Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…. Запустим этот скрипт сначала с GIL, Π° Π·Π°Ρ‚Π΅ΠΌ Π±Π΅Π· GIL. ``` import sys import sysconfig import math import time import threading import multiprocessing def compute_factorial(n): return math.factorial(n) # ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС def single_threaded_compute(n): for num in n: compute_factorial(num) print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.") # ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполннСниС def multi_threaded_compute(n): threads = [] # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² for num in n: thread = threading.Thread(target=compute_factorial, args=(num,)) threads.append(thread) thread.start() # Π–Π΄Ρ‘ΠΌ исполнСния всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² for thread in threads: thread.join() print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²") # ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ исполнСниС def multi_processing_compute(n): processes = [] # Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа for num in n: process = multiprocessing.Process(target=compute_factorial, args=(num,)) processes.append(process) process.start() # ОТидаСм исполнСниС всСх процСссов for process in processes: process.join() print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.") def main(): # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ print(f"ВСрсия Python: {sys.version}") # GIL Status status = sysconfig.get_config_var("Py_GIL_DISABLED") if status is None: print("GIL Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½") if status == 0: print("GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½") if status == 1: print("GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½") numlist = [100000, 200000, 300000, 400000, 500000] # ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС start = time.time() single_threaded_compute(numlist) end = time.time() - start print(f"ВрСмя исполнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ: {end:.2f} сСкунд") # ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС start = time.time() multi_threaded_compute(numlist) end = time.time() - start print(f"ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя исполнСния: {end:.2f} сСкунд") # ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ исполнСниС start = time.time() multi_processing_compute(numlist) end = time.time() - start print(f"ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ врСмя исполнСния: {end:.2f} сСкунд") if __name__ == "__main__": main() ``` ## Running `gil.py` with GIL ``` ВСрсия Python: 3.13.0b3 experimental free-threading build (tags/v3.13.0b3:7b41395, Jun 27 2024, 16:17:17) [MSC v.1940 64 bit (AMD64)] GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. ВрСмя исполнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ: 9.28 сСкунд Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя исполнСния: 4.86 сСкунд Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ врСмя исполнСния: 6.14 сСкунд ``` Π—Π΄Π΅ΡΡŒ Ρƒ нас Ρ‚Ρ€Π΅Ρ‚ΡŒΡ Π±Π΅Ρ‚Π°-вСрсия Python 3.13 с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ свободными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΈ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½. Но самоС Π³Π»Π°Π²Π½ΠΎΠ΅ - ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сниТСниС скорости Π² многопроцСссорных ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. [πŸ‘‰πŸ»ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° PythonTalk Π² Telegram](https://t.me/pythontalk_ru) πŸ‘ˆπŸ» [πŸ‘¨πŸ»β€πŸ’»Π§Π°Ρ‚ PythonTalk Π² TelegramπŸ’¬](https://t.me/pythontalk_chat) [🍩 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» 🫢](https://pay.cloudtips.ru/p/a9faffbb) > Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: [GeekPython](https://geekpython.in/gil-become-optional-in-python) [PythonTalk](https://pythontalk.olegtalks.ru/) September 6, 2024, 05:56 0 views 0 reactions 0 replies 0 reposts Repost Share
Readable Markdown
[GIL](https://teletype.in/@pythontalk/gil) (ΠΎΠ½ ΠΆΠ΅ Global Interpreter Lock) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Python вСрсии 3.13. Пока эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ являСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ. ΠšΡ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ этот GIL? Π­Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ CPython для обСспСчСния выполнСния Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Python ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ## Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция Π’ Python 3.13 срСди ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ привнСсёт Ρ€Π΅ΠΆΠΈΠΌ свободных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, позволяя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция, ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±Π΅Ρ‚Π°-Π²Π΅Ρ€ΡΠΈΡŽ Python 3.13 [здСсь](https://www.python.org/downloads/release/python-3130b3/). А Π²ΠΎ врСмя установки ΠΎΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Β«free threaded binaries(experimental)Β». ## ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GIL Π² Python 3.13 GIL Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Ссли ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `--disable-gil`. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ GIL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния `PYTHON_GIL`, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Π² значСния 1 ΠΈ 0 соотвСтствСнно. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ доступна опция ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки `-X gil`, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Π² 0 (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½) ΠΈ 1 (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½). ``` # v3.13 # GI ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ python3 -X gil=0 sample.py # GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ python3 -X gil=1 sample.py ``` ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π»ΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ свободныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ (`--disable-gil`) ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ: ``` import sysconfig print(sysconfig.get_config_var("Py_GIL_DISABLED")) ``` ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π»ΠΈΠ±ΠΎ 0 (GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½), Π»ΠΈΠ±ΠΎ 1 (GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½). ## GIL Vs No GIL Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ повлияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GIL. Π•ΡΡ‚ΡŒ простой скрипт (`gil.py`), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа ΠΈ сравниваСт врСмя выполнСния Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΈ многопроцСссорном Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…. Запустим этот скрипт сначала с GIL, Π° Π·Π°Ρ‚Π΅ΠΌ Π±Π΅Π· GIL. ``` import sys import sysconfig import math import time import threading import multiprocessing def compute_factorial(n): return math.factorial(n) # ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС def single_threaded_compute(n): for num in n: compute_factorial(num) print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.") # ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполннСниС def multi_threaded_compute(n): threads = [] # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² for num in n: thread = threading.Thread(target=compute_factorial, args=(num,)) threads.append(thread) thread.start() # Π–Π΄Ρ‘ΠΌ исполнСния всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² for thread in threads: thread.join() print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²") # ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ исполнСниС def multi_processing_compute(n): processes = [] # Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа for num in n: process = multiprocessing.Process(target=compute_factorial, args=(num,)) processes.append(process) process.start() # ОТидаСм исполнСниС всСх процСссов for process in processes: process.join() print("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.") def main(): # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ print(f"ВСрсия Python: {sys.version}") # GIL Status status = sysconfig.get_config_var("Py_GIL_DISABLED") if status is None: print("GIL Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½") if status == 0: print("GIL Π²ΠΊΠ»ΡŽΡ‡Π΅Π½") if status == 1: print("GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½") numlist = [100000, 200000, 300000, 400000, 500000] # ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС start = time.time() single_threaded_compute(numlist) end = time.time() - start print(f"ВрСмя исполнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ: {end:.2f} сСкунд") # ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ исполнСниС start = time.time() multi_threaded_compute(numlist) end = time.time() - start print(f"ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя исполнСния: {end:.2f} сСкунд") # ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ исполнСниС start = time.time() multi_processing_compute(numlist) end = time.time() - start print(f"ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ врСмя исполнСния: {end:.2f} сСкунд") if __name__ == "__main__": main() ``` ## Running `gil.py` with GIL ``` ВСрсия Python: 3.13.0b3 experimental free-threading build (tags/v3.13.0b3:7b41395, Jun 27 2024, 16:17:17) [MSC v.1940 64 bit (AMD64)] GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. ВрСмя исполнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ: 9.28 сСкунд Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя исполнСния: 4.86 сСкунд Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычислСн Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ врСмя исполнСния: 6.14 сСкунд ``` Π—Π΄Π΅ΡΡŒ Ρƒ нас Ρ‚Ρ€Π΅Ρ‚ΡŒΡ Π±Π΅Ρ‚Π°-вСрсия Python 3.13 с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ свободными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΈ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, GIL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½. Но самоС Π³Π»Π°Π²Π½ΠΎΠ΅ - ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сниТСниС скорости Π² многопроцСссорных ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. [πŸ‘‰πŸ»ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° PythonTalk Π² Telegram](https://t.me/pythontalk_ru) πŸ‘ˆπŸ» [πŸ‘¨πŸ»β€πŸ’»Π§Π°Ρ‚ PythonTalk Π² TelegramπŸ’¬](https://t.me/pythontalk_chat) [🍩 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» 🫢](https://pay.cloudtips.ru/p/a9faffbb) > Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: [GeekPython](https://geekpython.in/gil-become-optional-in-python)
Shard18 (laksa)
Root Hash16686452927583697618
Unparsed URLru,olegtalks!pythontalk,/optional_gil_313 s443