{"id":592690,"date":"2025-08-14T12:48:33","date_gmt":"2025-08-14T11:48:33","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=592690"},"modified":"2025-10-16T11:04:19","modified_gmt":"2025-10-16T10:04:19","slug":"faster-python-unlocking-the-python-global-interpreter-lock","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/ko\/pycharm\/2025\/08\/faster-python-unlocking-the-python-global-interpreter-lock\/","title":{"rendered":"\ub354 \ube68\ub77c\uc9c4 Python: Python\uc758 \uc804\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \uc7a0\uae08 \ud574\uc81c"},"content":{"rendered":"<h2 id=\"what-is-pythons-global-interpreter-lock-gil\" class=\"wp-block-heading\">Python\uc758 \uc804\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \uc7a0\uae08(GIL)\uc774\ub780?<\/h2>\n<p>&#8216;\uc804\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \uc7a0\uae08'(\ub610\ub294 GIL)\uc740 Python \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c\ub294 \uc775\uc219\ud55c \uc6a9\uc5b4\ub85c, \uc798 \uc54c\ub824\uc9c4 Python \uc791\ub3d9 \ubc29\uc2dd\uc785\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 GIL\uc740 \uc815\ud655\ud788 \ubb34\uc5c7\uc77c\uae4c\uc694?<\/p>\n<p>\ub2e4\ub978 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4(\uc608: Rust)\ub97c \uc0ac\uc6a9\ud574 \ubcf8 \uc801\uc774 \uc788\ub2e4\uba74 \ubba4\ud14d\uc2a4\uac00 \ubb34\uc5c7\uc778\uc9c0 \uc544\uc2e4 \uac81\ub2c8\ub2e4. \ubba4\ud14d\uc2a4\ub294 &#8216;mutual exclusion&#8217;\uc758 \uc904\uc784\ub9d0\uc785\ub2c8\ub2e4. \ubba4\ud14d\uc2a4\ub294 \ud55c \ubc88\uc5d0 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub9cc \ub370\uc774\ud130\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \uc5ec\ub7ec \uc2a4\ub808\ub4dc\uac00 \ub3d9\uc2dc\uc5d0 \ub370\uc774\ud130\ub97c \uc218\uc815\ud558\ub294 \uac83\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ud0a4\ub97c \ubcf4\uc720\ud55c \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub97c \uc81c\uc678\ud55c \ubaa8\ub4e0 \uc2a4\ub808\ub4dc\uac00 \ub370\uc774\ud130\uc5d0 \uc811\uadfc\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\ub294 \uc77c\uc885\uc758 &#8216;\uc790\ubb3c\uc1e0&#8217; \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/p>\n<p>GIL\uc740 \ud615\uc2dd\uc0c1 \ubba4\ud14d\uc2a4\uc785\ub2c8\ub2e4. \ud55c \ubc88\uc5d0 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub9cc Python \uc778\ud130\ud504\ub9ac\ud130\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub54c\ub85c\ub294 GIL\uc774 Python\uc758 \uc6b4\uc804\ub300\ucc98\ub7fc \ub290\uaef4\uc9c0\uae30\ub3c4 \ud569\ub2c8\ub2e4. \uc6b4\uc804\ub300\ub97c \ub450 \uba85 \uc774\uc0c1\uc774 \uc7a1\ub294 \uac83\uc740 \ubc14\ub78c\uc9c1\ud558\uc9c0 \uc54a\uc73c\ub2c8\uae4c\uc694! \ud558\uc9c0\ub9cc \ub2e8\uccb4 \uc5ec\ud589\uc744 \uac08 \ub54c\ub294 \uc6b4\uc804\uc790\ub97c \uad50\ub300\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc774 \uc788\uc8e0. \uc774\ub294 \ub2e4\ub978 \uc2a4\ub808\ub4dc\uc5d0 \uc778\ud130\ud504\ub9ac\ud130 \uc561\uc138\uc2a4 \uad8c\ud55c\uc744 \ubd80\uc5ec\ud558\ub294 \uac83\uacfc \ube44\uc2b7\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc GIL \ub54c\ubb38\uc5d0 Python\uc5d0\uc11c\ub294 \uc9c4\uc815\ud55c \uba40\ud2f0\uc2a4\ub808\ub529 \ud504\ub85c\uc138\uc2a4\uac00 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc9c0\ub09c 10\ub144 \ub3d9\uc548 \ub17c\uc7c1\uc744 \ubd88\ub7ec\uc77c\uc73c\ucf30\uc73c\uba70, GIL\uc744 \uc81c\uac70\ud558\uace0 \uba40\ud2f0\uc2a4\ub808\ub529 \ud504\ub85c\uc138\uc2a4\ub97c \ud5c8\uc6a9\ud558\uc5ec Python \uc18d\ub3c4\ub97c \ub192\uc774\ub824\ub294 \uc2dc\ub3c4\uac00 \ub9ce\uc774 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ucd5c\uadfc Python 3.13\uc5d0\uc11c\ub294 GIL\uc5c6\uc774 Python\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc635\uc158\uc774 \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc885\uc885 no-GIL Python \ub610\ub294 free-threaded Python(\uc790\uc720\ub85c\uc6b4 \uc2a4\ub808\ub4dc \ucc98\ub9ac \uc9c0\uc6d0 Python)\uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4. \uc774\ub85c\uc368 Python \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc0c8\ub85c\uc6b4 \uc2dc\ub300\uac00 \uc2dc\uc791\ub41c \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h2 id=\"why-was-the-gil-there-in-the-first-place\" class=\"wp-block-heading\">\ucc98\uc74c\uc5d0 GIL\uc774 \uad6c\ud604\ub41c \uc774\uc720<\/h2>\n<p>GIL\uc774 \uadf8\ub807\uac8c \uc778\uae30\uac00 \uc5c6\ub2e4\uba74 \uc560\ucd08\uc5d0 \uc65c \uc774\ub97c \uad6c\ud604\ud55c \uac83\uc77c\uae4c\uc694? \uc2e4\uc81c\ub85c GIL\uc5d0\ub294 \ub9ce\uc740 \uc774\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc9c4\uc815\ud55c \uba40\ud2f0\uc2a4\ub808\ub529\uc744 \uac16\ucd98 \ub2e4\ub978 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uc2a4\ub808\ub4dc\uac00 \ub370\uc774\ud130\ub97c \uc218\uc815\ud560 \ub54c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc73c\uba70, \ucd5c\uc885 \uacb0\uacfc\uac00 \uc5b4\ub290 \uc2a4\ub808\ub4dc\ub098 \ud504\ub85c\uc138\uc2a4\uac00 \uba3c\uc800 \ub05d\ub098\ub294\uc9c0\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc744 &#8216;\uacbd\uc7c1 \uc0c1\ud0dc&#8217;\ub77c\uace0 \ud569\ub2c8\ub2e4. Rust\uc640 \uac19\uc740 \uc5b8\uc5b4\ub294 \ud504\ub85c\uadf8\ub798\uba38\uac00 \uacbd\uc7c1 \uc0c1\ud0dc\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574 \ubba4\ud14d\uc2a4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\uae30 \ub54c\ubb38\uc5d0 \ubc30\uc6b0\uae30 \uc5b4\ub824\uc6b4 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Python\uc5d0\uc11c \ubaa8\ub4e0 \uac1d\uccb4\ub294 \uc790\uc2e0\uc5d0\uac8c \uc815\ubcf4\ub97c \uc694\uccad\ud558\ub294 \uac1d\uccb4\uc758 \uc218\ub97c \ucd94\uc801\ud558\ub294 \ucc38\uc870 \uce74\uc6b4\ud130\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ucc38\uc870 \uce74\uc6b4\ud130\uac00 0\uc5d0 \ub3c4\ub2ec\ud558\uba74 GIL\ub85c \uc778\ud574 Python\uc5d0 \uacbd\uc7c1 \uc0c1\ud0dc\uac00 \uc5c6\ub2e4\ub294 \ub73b\uc774\ubbc0\ub85c \ud574\ub2f9 \uac1d\uccb4\uac00 \ub354 \uc774\uc0c1 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\uba70 \uac00\ube44\uc9c0 \uceec\ub809\uc158\uc774 \uac00\ub2a5\ud558\ub2e4\uace0 \ud655\uc2e4\ud788 \uc120\uc5b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>1991\ub144 Python\uc774 \ucc98\uc74c \ucd9c\uc2dc\ub418\uc5c8\uc744 \ub2f9\uc2dc \ub300\ubd80\ubd84\uc758 \uac1c\uc778\uc6a9 \ucef4\ud4e8\ud130\uc5d0\ub294 \ucf54\uc5b4\uac00 \ud558\ub098\ubfd0\uc774\uc5c8\uace0, \uba40\ud2f0\uc2a4\ub808\ub529 \uc9c0\uc6d0\uc744 \uc694\uccad\ud55c \ud504\ub85c\uadf8\ub798\uba38\ub294 \ub9ce\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. GIL\uc744 \uc0ac\uc6a9\ud558\uba74 \ud504\ub85c\uadf8\ub7a8 \uad6c\ud604 \uc2dc \ub9ce\uc740 \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\uace0, \ucf54\ub4dc \uc720\uc9c0 \uad00\ub9ac\ub3c4 \ub354 \uc26c\uc6cc\uc9d1\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc774\uc720\ub85c Python\uc744 \ub9cc\ub4e0 Guido van Rossum\uc740 1992\ub144\uc5d0 GIL\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>2025\ub144\uc774 \ub41c \uc9c0\uae08, \uac1c\uc778\uc6a9 \ucef4\ud4e8\ud130\uc5d0\ub294 \uba40\ud2f0\ucf54\uc5b4 \ud504\ub85c\uc138\uc11c\uac00 \ud0d1\uc7ac\ub418\uc5b4 \uc608\uc804\ubcf4\ub2e4 \ud6e8\uc52c \uac15\ub825\ud55c \ucef4\ud4e8\ud305 \uc131\ub2a5\uc774 \ud06c\uac8c \ud5a5\uc0c1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \ucd94\uac00\uc801\uc778 \ucef4\ud4e8\ud305 \uc131\ub2a5\uc744 \ud65c\uc6a9\ud574 GIL\uc744 \uc5c6\uc560\uc9c0 \uc54a\uace0\ub3c4 \uc9c4\uc815\ud55c \ub3d9\uc2dc\uc131\uc744 \uc5bb\uc744 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub97c \uc81c\uac70\ud558\ub294 \uacfc\uc815\uc740 \uc774 \uae00\uc758 \ub4b7\ubd80\ubd84\uc5d0\uc11c \uc790\uc138\ud788 \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc9c0\uae08\uc740 GIL\uc774 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c \uc9c4\uc815\ud55c \ub3d9\uc2dc\uc131\uc774 \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"multiprocessing-in-python\" class=\"wp-block-heading\">Python\uc5d0\uc11c\uc758 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1<\/h2>\n<p>GIL \uc81c\uac70 \uacfc\uc815\uc744 \uc790\uc138\ud788 \uc0b4\ud3b4\ubcf4\uae30 \uc804\uc5d0 \uba3c\uc800 Python \uac1c\ubc1c\uc790\uac00 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc9c4\uc815\ud55c \ub3d9\uc2dc\uc131\uc744 \ub2ec\uc131\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ub85c\uceec \ubc0f \uc6d0\uaca9 \ub3d9\uc2dc\uc131\uc744 \ubaa8\ub450 \uc81c\uacf5\ud558\uba70, \uc2a4\ub808\ub4dc \ub300\uc2e0 \ud558\uc704 \ud504\ub85c\uc138\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc804\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \uc7a0\uae08\uc744 \ud6a8\uacfc\uc801\uc73c\ub85c \uc6b0\ud68c\ud569\ub2c8\ub2e4. \uc774\ub7f0 \uc2dd\uc73c\ub85c \uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uba74 \ud504\ub85c\uadf8\ub798\uba38\uac00 \ud2b9\uc815 \ucef4\ud4e8\ud130\uc758 \uc5ec\ub7ec \ud504\ub85c\uc138\uc11c\ub97c \uc644\uc804\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc744 \uc218\ud589\ud558\ub824\uba74 \ud504\ub85c\uadf8\ub7a8\uc744 \uc57d\uac04 \ub2e4\ub978 \ubc29\uc2dd\uc73c\ub85c \uc124\uacc4\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uc608\uc2dc\uc5d0\uc11c\ub294 Python\uc5d0\uc11c \uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<br \/>\ube14\ub85c\uadf8 \uc2dc\ub9ac\uc988 1\ubd80\uc5d0\uc11c \uc18c\uac1c\ud55c \ube44\ub3d9\uae30 \ud584\ubc84\uac70\uc9d1\uc744 \uae30\uc5b5\ud558\uc2dc\ub098\uc694?<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import asyncio\n\nimport time\n\nasync def make_burger(order_num):\n\n    print(f\"Preparing burger #{order_num}...\")\n\n    await asyncio.sleep(5) # time for making the burger\n\n    print(f\"Burger made #{order_num}\")\n\nasync def main():\n\n    order_queue = []\n\n    for i in range(3):\n\n        order_queue.append(make_burger(i))\n\n    await asyncio.gather(*(order_queue))\n\nif __name__ == \"__main__\":\n\n    s = time.perf_counter()\n\n    asyncio.run(main())\n\n    elapsed = time.perf_counter() - s\n\n    print(f\"Orders completed in {elapsed:0.2f} seconds.\")\n<\/pre>\n<p>\uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub3d9\uc77c\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import multiprocessing\n\n\nimport time\n\n\ndef make_burger(order_num):\n\n\n   print(f\"Preparing burger #{order_num}...\")\n\n\n   time.sleep(5) # time for making the burger\n\n\n   print(f\"Burger made #{order_num}\")\n\n\n\n\nif __name__ == \"__main__\":\n\n\n   print(\"Number of available CPU:\", multiprocessing.cpu_count())\n\n\n\n\n   s = time.perf_counter()\n\n\n   all_processes = []\n\n\n   for i in range(3):\n       process = multiprocessing.Process(target=make_burger, args=(i,))\n       process.start()\n       all_processes.append(process)\n\n\n   for process in all_processes:\n       process.join()\n\n\n   elapsed = time.perf_counter() - s\n\n\n   print(f\"Orders completed in {elapsed:0.2f} seconds.\")\n<\/pre>\n<p>\uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc758 \ub9ce\uc740 \uba54\uc11c\ub4dc\uac00 \uc2a4\ub808\ub529\uacfc \ub9e4\uc6b0 \uc720\uc0ac\ud558\ub2e4\ub294 \uac83\uc744 \uae30\uc5b5\ud558\uc2e4 \uac81\ub2c8\ub2e4. \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc758 \ucc28\uc774\uc810\uc744 \uc774\ud574\ud558\uae30 \uc704\ud574 \uc880 \ub354 \ubcf5\uc7a1\ud55c \uc0ac\uc6a9 \uc0ac\ub840\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import multiprocessing\nimport time\nimport queue\n\n\n\n\ndef make_burger(order_num, item_made):\n   name = multiprocessing.current_process().name\n   print(f\"{name} is preparing burger #{order_num}...\")\n   time.sleep(5)  # time for making burger\n   item_made.put(f\"Burger #{order_num}\")\n   print(f\"Burger #{order_num} made by {name}\")\n\n\n\n\ndef make_fries(order_num, item_made):\n   name = multiprocessing.current_process().name\n   print(f\"{name} is preparing fries #{order_num}...\")\n   time.sleep(2)  # time for making fries\n   item_made.put(f\"Fries #{order_num}\")\n   print(f\"Fries #{order_num} made by {name}\")\n\n\n\n\ndef working(task_queue, item_made, order_num, lock):\n   break_count = 0\n   name = multiprocessing.current_process().name\n   while True:\n       try:\n           task = task_queue.get_nowait()\n       except queue.Empty:\n           print(f\"{name} has nothing to do...\")\n           if break_count &gt; 1:\n               break  # stop if idle for too long\n           else:\n               break_count += 1\n           time.sleep(1)\n       else:\n           lock.acquire()\n           try:\n               current_num = order_num.value\n               order_num.value = current_num + 1\n           finally:\n               lock.release()\n           task(current_num, item_made)\n           break_count = 0\n\n\n\n\nif __name__ == \"__main__\":\n\n\n   print(\"Welcome to Pyburger! Please place your order.\")\n\n\n   burger_num = input(\"Number of burgers:\")\n   fries_num = input(\"Number of fries:\")\n\n\n   s = time.perf_counter()\n\n\n   task_queue = multiprocessing.Queue()\n   item_made = multiprocessing.Queue()\n   order_num = multiprocessing.Value(\"i\", 0)\n   lock = multiprocessing.Lock()\n\n\n   for i in range(int(burger_num)):\n       task_queue.put(make_burger)\n   for i in range(int(fries_num)):\n       task_queue.put(make_fries)\n\n\n   staff1 = multiprocessing.Process(\n       target=working,\n       name=\"John\",\n       args=(\n           task_queue,\n           item_made,\n           order_num,\n           lock,\n       ),\n   )\n   staff2 = multiprocessing.Process(\n       target=working,\n       name=\"Jane\",\n       args=(\n           task_queue,\n           item_made,\n           order_num,\n           lock,\n       ),\n   )\n\n\n   staff1.start()\n   staff2.start()\n\n\n   staff1.join()\n   staff2.join()\n\n\n   print(\"All tasks finished. Closing now.\")\n   print(\"Items created are:\")\n\n\n   while not item_made.empty():\n       print(item_made.get())\n\n\n   elapsed = time.perf_counter() - s\n\n\n   print(f\"Orders completed in {elapsed:0.2f} seconds.\")\n<\/pre>\n<p>\ub098\uc624\ub294 \ucd9c\ub825\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Welcome to Pyburger! Please place your order.\nNumber of burgers:3\nNumber of fries:2\nJane has nothing to do...\nJohn is preparing burger #0...\nJane is preparing burger #1...\nBurger #0 made by John\nJohn is preparing burger #2...\nBurger #1 made by Jane\nJane is preparing fries #3...\nFries #3 made by Jane\nJane is preparing fries #4...\nBurger #2 made by John\nJohn has nothing to do...\nFries #4 made by Jane\nJane has nothing to do...\nJohn has nothing to do...\nJane has nothing to do...\nJohn has nothing to do...\nJane has nothing to do...\nAll tasks finished. Closing now.\nItems created are:\nBurger #0\nBurger #1\nFries #3\nBurger #2\nFries #4\nOrders completed in 12.21 seconds.\n<\/pre>\n<p>\uc704 \ucf54\ub4dc\uac00 \uc774\ub7f0 \ubc29\uc2dd\uc73c\ub85c \uc124\uacc4\ub41c \uc774\uc720\ub294 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc758 \uba87 \uac00\uc9c0 \uc81c\ud55c \ub54c\ubb38\uc785\ub2c8\ub2e4. \ud558\ub098\uc529 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800, \uc55e\uc11c \uc62c\ubc14\ub978 order_num\uc744 \uac16\ub294 \ud568\uc218\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574 make_burger \ubc0f make_fries \ud568\uc218\uac00 \uc788\uc5c8\ub2e4\ub294 \uc810\uc744 \uae30\uc5b5\ud558\uc138\uc694.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def make_burger(order_num):\n   def making_burger():\n       logger.info(f\"Preparing burger #{order_num}...\")\n       time.sleep(5)  # time for making burger\n       logger.info(f\"Burger made #{order_num}\")\n\n\n   return making_burger\n\n\n\n\ndef make_fries(order_num):\n   def making_fries():\n       logger.info(f\"Preparing fries #{order_num}...\")\n       time.sleep(2)  # time for making fries\n       logger.info(f\"Fries made #{order_num}\")\n\n\n   return making_fries\n<\/pre>\n<p>\uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc744 \uc0ac\uc6a9\ud558\uba74 \ub3d9\uc77c\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uadf8\ub807\uac8c \uc2dc\ub3c4\ud558\uba74 \ub2e4\uc74c \uc904\uc5d0\uc11c \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">AttributeError: Can't get local object 'make_burger..making_burger'<\/pre>\n<p>\uadf8 \uc774\uc720\ub294 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc774 \uc77c\ubc18\uc801\uc73c\ub85c \ucd5c\uc0c1\uc704 \ubaa8\ub4c8 \uc218\uc900 \ud568\uc218\ub9cc \uc9c1\ub82c\ud654\ud560 \uc218 \uc788\ub294 <a href=\"https:\/\/docs.python.org\/3\/library\/pickle.html\" target=\"_blank\" rel=\"noopener\">pickle<\/a>\uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uc774\ub294 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc758 \ud55c\uacc4 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4<em>.<\/em><\/p>\n<p>\ub450 \ubc88\uc9f8\ub85c, \uc704\uc758 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc744 \uc0ac\uc6a9\ud55c \uc608\uc81c \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc5d0\uc11c \uacf5\uc720 \ub370\uc774\ud130\uc5d0 \ub300\ud574 \uc804\uc5ed \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \uc608\ub97c \ub4e4\uc5b4, item_made\uc640 order_num\uc5d0 \uc804\uc5ed \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc11c\ub85c \ub2e4\ub978 \ud504\ub85c\uc138\uc2a4 \uac04\uc5d0 \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\uae30 \uc704\ud574 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ud2b9\uc218 \ud074\ub798\uc2a4 \uac1d\uccb4(\uc608: Queue<em> \ubc0f <\/em>Value)\uac00 \uc0ac\uc6a9\ub418\uace0 \ud504\ub85c\uc138\uc2a4\uc5d0 \uc778\uc218\ub85c \uc804\ub2ec\ub429\ub2c8\ub2e4.<br \/>\uc77c\ubc18\uc801\uc73c\ub85c, \uc11c\ub85c \ub2e4\ub978 \ud504\ub85c\uc138\uc2a4 \uac04\uc5d0 \ub370\uc774\ud130\uc640 \uc0c1\ud0dc\ub97c \uacf5\uc720\ud558\ub294 \uac83\uc740 \ub354 \ub9ce\uc740 \ubb38\uc81c\ub97c \uc57c\uae30\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uad8c\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc704\uc758 \uc608\uc5d0\uc11c\ub294 \uc7a0\uae08\uc744 \uc0ac\uc6a9\ud558\uc5ec order_num\uc758 \uac12\uc774 \ud55c \ubc88\uc5d0 \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\uc5d0 \uc758\ud574\uc11c\ub9cc \uc811\uadfc\ub418\uace0 \uc99d\uac00\ud558\ub3c4\ub85d \ud574\uc57c \ud569\ub2c8\ub2e4. \uc7a0\uae08\uc774 \uc5c6\uc73c\uba74 \ud488\ubaa9\uc758 \uc8fc\ubb38 \ubc88\ud638\uac00 \ub2e4\uc74c\uacfc \uac19\uc774 \uc5c9\ub9dd\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Items created are:\n\nBurger #0\nBurger #0\nFries #2\nBurger #1\nFries #3\n<\/pre>\n<p>\ubb38\uc81c\ub97c \ud53c\ud558\uae30 \uc704\ud574 \uc7a0\uae08\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">           lock.acquire()\n           try:\n               current_num = order_num.value\n               order_num.value = current_num + 1\n           finally:\n               lock.release()\n           task(current_num, item_made)\n<\/pre>\n<p>\uba40\uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9\ubc95\uc744 \ub354 \uc54c\uc544\ubcf4\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74, <a href=\"https:\/\/docs.python.org\/3\/library\/multiprocessing.html\" target=\"_blank\" rel=\"noopener\">\uc774 \ubb38\uc11c<\/a>\ub97c \ucc38\uace0\ud558\uc138\uc694.<\/p>\n<h2 id=\"removing-the-gil\" class=\"wp-block-heading\">GIL \uc81c\uac70<\/h2>\n<p>GIL \uc81c\uac70\ub294 \uac70\uc758 10\ub144 \ub3d9\uc548 \ub17c\uc758\ub41c \uc8fc\uc81c\uc600\uc2b5\ub2c8\ub2e4. 2016\ub144 Python Language Summit\uc5d0\uc11c Larry Hastings\ub294 CPython \uc778\ud130\ud504\ub9ac\ud130\uc758 &#8216;GIL \uc81c\uac70&#8217;\uc5d0 \ub300\ud55c \uc790\uc2e0\uc758 \uc544\uc774\ub514\uc5b4\uc640 \uc774 \uc544\uc774\ub514\uc5b4\ub85c \uc774\ub8ec \uc131\uacfc\ub97c \ubc1c\ud45c\ud588\uc2b5\ub2c8\ub2e4[1]. \uc774\ub294 Python GIL\uc744 \uc81c\uac70\ud558\ub824\ub294 \ud68d\uae30\uc801\uc778 \uc2dc\ub3c4\uc600\uc2b5\ub2c8\ub2e4. 2021\ub144\uc5d0 Sam Gross\ub294 GIL[2] \uc81c\uac70\uc5d0 \ub300\ud55c \ub17c\uc758\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud588\uace0, \uc774\ub85c \uc778\ud574 2023\ub144\uc5d0 <a href=\"https:\/\/peps.python.org\/pep-0703\/\" target=\"_blank\" rel=\"noopener\">CPython\uc5d0\uc11c \uc804\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \uc7a0\uae08\uc744 \uc120\ud0dd \uc0ac\ud56d\uc73c\ub85c \ub9cc\ub4dc\ub294 PEP 703<\/a>\uc774 \ucd9c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubcf4\uc2dc\ub2e4\uc2dc\ud53c, GIL\uc744 \uc81c\uac70\ud558\ub294 \uac83\uc740 \uacb0\ucf54 \uc131\uae09\ud55c \uacb0\uc815\uc774 \uc544\ub2c8\uc5c8\uc73c\uba70 \uc774\ubbf8 \ucee4\ubba4\ub2c8\ud2f0 \ub0b4\uc5d0\uc11c \uc0c1\ub2f9\ud55c \ub17c\uc7c1\uc758 \ub300\uc0c1\uc774 \ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4. \uc704\uc758 \uba40\ud2f0\ud504\ub85c\uc138\uc2f1 \uc608\uc81c(\ubc0f \uc704\uc5d0 \ub9c1\ud06c\ub41c PEP 703)\uc5d0\uc11c \ubcfc \uc218 \uc788\ub4ef\uc774 GIL\uc774 \uc81c\uacf5\ud558\ub358 \ubcf4\uc7a5\uc774 \uc0ac\ub77c\uc9c0\uba74 \uc0c1\ud669\uc740 \ube60\ub974\uac8c \ubcf5\uc7a1\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n<p>[1]: <a href=\"https:\/\/lwn.net\/Articles\/689548\/\" target=\"_blank\" rel=\"noopener\">https:\/\/lwn.net\/Articles\/689548\/<\/a><\/p>\n<p>[2]: <a href=\"_wp_link_placeholder\" data-wplink-edit=\"true\">https:\/\/lwn.net\/ml\/python-dev\/CAGr09bSrMNyVNLTvFq-h6t38kTxqTXfgxJYApmbEWnT71L74-g@mail.gmail.com\/<\/a><\/p>\n<h3 id=\"reference-counting\" class=\"wp-block-heading\">\ucc38\uc870 \uacc4\uc0b0<\/h3>\n<p>GIL\uc774 \uc788\uc73c\uba74 \ucc38\uc870 \uacc4\uc0b0\uacfc \uac00\ube44\uc9c0 \uceec\ub809\uc158\uc774 \ub354 \uac04\ub2e8\ud574\uc9d1\ub2c8\ub2e4. \ud55c \ubc88\uc5d0 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub9cc Python \uac1d\uccb4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uacbd\uc6b0 \uac04\ub2e8\ud55c \ube44\uc6d0\uc790\uc801 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Reference_counting\" target=\"_blank\" rel=\"noopener\">\ucc38\uc870 \uacc4\uc0b0<\/a>\uc744 \uc0ac\uc6a9\ud558\uace0 \ucc38\uc870 \uacc4\uc0b0\uc774 0\uc5d0 \ub3c4\ub2ec\ud558\uba74 \uac1d\uccb4\ub97c \uc81c\uac70\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>GIL\uc744 \uc81c\uac70\ud558\uba74 \uc0c1\ud669\uc774 \uc870\uae08 \uae4c\ub2e4\ub85c\uc6cc\uc9d1\ub2c8\ub2e4. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Thread_safety\" target=\"_blank\" rel=\"noopener\">\uc2a4\ub808\ub4dc \uc548\uc804<\/a>\uc774 \ubcf4\uc7a5\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ube44\uc6d0\uc790\uc801 \ucc38\uc870 \uacc4\uc0b0\uc744 \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec \uc2a4\ub808\ub4dc\uac00 Python \uac1d\uccb4\uc5d0 \ub300\ud55c \ucc38\uc870\uc758 \uc99d\uac00\uc640 \uac10\uc18c\ub97c \ub3d9\uc2dc\uc5d0 \uc218\ud589\ud558\ub294 \uacbd\uc6b0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc0c1\uc801\uc73c\ub85c\ub294 \uc6d0\uc790\uc801 \ucc38\uc870 \uacc4\uc0b0\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc2a4\ub808\ub4dc \uc548\uc804\uc131\uc744 \ubcf4\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774 \ubc29\ubc95\uc740 \uc624\ubc84\ud5e4\ub4dc\uac00 \ub192\uace0 \uc2a4\ub808\ub4dc\uac00 \ub9ce\uc744 \uacbd\uc6b0 \ud6a8\uc728\uc131\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce69\ub2c8\ub2e4.<\/p>\n<p>\ud574\uacb0\ucc45\uc740 \ud3b8\ud5a5\ub41c \ucc38\uc870 \uacc4\uc0b0\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc778\ub370, \uc774\ub97c \ud1b5\ud574 \uc2a4\ub808\ub4dc \uc548\uc804\uc131\ub3c4 \ubcf4\uc7a5\ub429\ub2c8\ub2e4. \uc5ec\uae30\uc11c \uc544\uc774\ub514\uc5b4\ub294 \uac01 \uac1d\uccb4\ub97c \uc18c\uc720\uc790 \uc2a4\ub808\ub4dc, \uc989 \ub300\ubd80\ubd84\uc758 \uc2dc\uac04 \ub3d9\uc548 \uac1d\uccb4\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \uc2a4\ub808\ub4dc\uc5d0 \ud3b8\ud5a5\uc2dc\ud0a4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc18c\uc720\uc790 \uc2a4\ub808\ub4dc\ub294 \uc790\uc2e0\uc774 \uc18c\uc720\ud55c \uac1d\uccb4\uc5d0 \ub300\ud574 \ube44\uc6d0\uc790\uc801 \ucc38\uc870 \uacc4\uc0b0\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub294 \ubc18\uba74, \ub2e4\ub978 \uc2a4\ub808\ub4dc\ub294 \uc774\ub7ec\ud55c \uac1d\uccb4\uc5d0 \ub300\ud574 \uc6d0\uc790\uc801 \ucc38\uc870 \uacc4\uc0b0\uc744 \uc218\ud589\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc811\uadfc \ubc29\uc2dd\uc740 \ub300\ubd80\ubd84\uc758 \uac1d\uccb4\uac00 \ub300\ubd80\ubd84\uc758 \uc2dc\uac04 \ub3d9\uc548 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\uc5d0 \uc758\ud574\uc11c\ub9cc \uc561\uc138\uc2a4\ub418\uae30 \ub54c\ubb38\uc5d0 \uc21c\uc218\ud55c \uc6d0\uc790\uc801 \ucc38\uc870 \uacc4\uc0b0\ubcf4\ub2e4 \ub354 \ubc14\ub78c\uc9c1\ud569\ub2c8\ub2e4. \uc18c\uc720\uc790 \uc2a4\ub808\ub4dc\uac00 \ube44\uc6d0\uc790\uc801 \ucc38\uc870 \uacc4\uc0b0\uc744 \uc218\ud589\ud558\ub3c4\ub85d \ud5c8\uc6a9\ud558\uba74 \uc2e4\ud589 \uc624\ubc84\ud5e4\ub4dc\ub97c \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586289\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-22.png\" alt=\"\" width=\"1280\" height=\"720\" \/><\/figure>\n<p>\ub610\ud55c True, False<em>, <\/em>\uc791\uc740 \uc815\uc218 \ubc0f \uc77c\ubd80 \uc784\uc2dc \ubb38\uc790\uc5f4\uacfc \uac19\uc774 \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \uc77c\ubd80 Python \uac1d\uccb4\ub294 \uc601\uad6c\uc801\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc11c &#8216;\uc601\uad6c\uc801&#8217;\uc774\ub780 \uac1d\uccb4\uac00 \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\uba85 \ub3d9\uc548 \ubcf4\uc874\ub418\ubbc0\ub85c \ucc38\uc870 \uacc4\uc0b0\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n<h3 id=\"garbage-collection\" class=\"wp-block-heading\">\uac00\ube44\uc9c0 \uceec\ub809\uc158<\/h3>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Garbage_collection_(computer_science)\" target=\"_blank\" rel=\"noopener\">\uac00\ube44\uc9c0 \uceec\ub809\uc158<\/a>\uc774 \uc218\ud589\ub418\ub294 \ubc29\uc2dd\ub3c4 \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \ucc38\uc870\uac00 \ud574\uc81c\ub420 \ub54c \ucc38\uc870 \uce74\uc6b4\ud2b8\ub294 \uc989\uc2dc \uac10\uc18c\ud558\uc9c0 \uc54a\uc73c\uba70, \ucc38\uc870 \uce74\uc6b4\ud2b8\uac00 0\uc5d0 \ub3c4\ub2ec\ud574\ub3c4 \uac1d\uccb4\ub294 \uc989\uc2dc \uc81c\uac70\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 &#8216;\uc9c0\uc5f0 \ucc38\uc870 \uacc4\uc0b0&#8217;\uc774\ub77c\ub294 \uae30\ubc95\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>\ucc38\uc870 \uce74\uc6b4\ud2b8\ub97c \uac10\uc18c\uc2dc\ucf1c\uc57c \ud558\ub294 \uacbd\uc6b0, \uac1d\uccb4\ub294 \ud14c\uc774\ube14\uc5d0 \uc800\uc7a5\ub418\uace0 \uc774\ud6c4 \ub450 \ubc88 \uac80\uc0ac\ub418\uc5b4 \ucc38\uc870 \uce74\uc6b4\ud2b8\uac00 \uc62c\ubc14\ub974\uac8c \uac10\uc18c\ud588\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 GIL\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\uba74 \ucc38\uc870 \uacc4\uc0b0\uc774 GIL\ub9cc\ud07c \uc9c1\uad00\uc801\uc774\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ucc38\uc870 \uc911\uc778 \uac1d\uccb4\uac00 \uc870\uae30\uc5d0 \uc81c\uac70\ub418\ub294 \uc77c\uc774 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ub418\uba74 \uac00\ube44\uc9c0 \uceec\ub809\uc158 \ud504\ub85c\uc138\uc2a4\uac00 \ub354 \ubcf5\uc7a1\ud574\uc9d1\ub2c8\ub2e4. \uac00\ube44\uc9c0 \uceec\ub809\uc158\uc774 \uac01 \uc2a4\ub808\ub4dc\uc758 \uc790\uccb4 \ucc38\uc870 \uce74\uc6b4\ud2b8\ub97c \uc5bb\uae30 \uc704\ud574 \uac01 \uc2a4\ub808\ub4dc\uc758 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Stack_(abstract_data_type)\" target=\"_blank\" rel=\"noopener\">\uc2a4\ud0dd<\/a>\uc744 \ud0d0\uc0c9\ud574\uc57c \ud560 \uc218\ub3c4 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p>\uace0\ub824\ud574\uc57c \ud560 \ub610 \ub2e4\ub978 \uc0ac\ud56d\uc740 \uac00\ube44\uc9c0 \uceec\ub809\uc158 \uc911\uc5d0 \ucc38\uc870 \uce74\uc6b4\ud2b8\uac00 \uc548\uc815\uc801\uc73c\ub85c \uc720\uc9c0\ub418\uc5b4\uc57c \ud55c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uac1d\uccb4\uac00 \uc0ad\uc81c\ub418\ub824\uace0 \ud560 \ub54c \uac11\uc790\uae30 \ucc38\uc870\ub418\ub294 \uacbd\uc6b0 \uc2ec\uac01\ud55c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \uac00\ube44\uc9c0 \uceec\ub809\uc158 \uc8fc\uae30 \ub3d9\uc548 \uc2a4\ub808\ub4dc \uc548\uc804\uc744 \ubcf4\uc7a5\ud558\uae30 \uc704\ud574 &#8216;\uc138\uacc4\ub97c \uba48\ucdb0\uc57c&#8217; \ud569\ub2c8\ub2e4.<\/p>\n<h3 id=\"memory-allocation\" class=\"wp-block-heading\">\uba54\ubaa8\ub9ac \ud560\ub2f9<\/h3>\n<p>GIL\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc2a4\ub808\ub4dc \uc548\uc804\uc744 \ubcf4\uc7a5\ud558\ub294 \uacbd\uc6b0 Python\uc758 \ub0b4\ubd80 \uba54\ubaa8\ub9ac \ud560\ub2f9\uc790 pymalloc\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ud558\uc9c0\ub9cc GIL\uc774 \uc5c6\ub2e4\uba74 \uc0c8\ub85c\uc6b4 \uba54\ubaa8\ub9ac \ud560\ub2f9\uc790\uac00 \ud544\uc694\ud560 \uac83\uc785\ub2c8\ub2e4. Sam Gross\ub294 Daan Leijen\uc774 \ub9cc\ub4e4\uace0 Microsoft\uc5d0\uc11c \uc720\uc9c0 \uad00\ub9ac\ud558\ub294 \ubc94\uc6a9 \ud560\ub2f9\uc790\uc778 <a href=\"https:\/\/github.com\/microsoft\/mimalloc\" target=\"_blank\" rel=\"noopener\">mimalloc<\/a>\uc744 PEP\uc5d0\uc11c \uc81c\uc548\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc740 \uc2a4\ub808\ub4dc\ub85c\ubd80\ud130 \uc548\uc804\ud558\uace0 \uc791\uc740 \uac1d\uccb4\uc5d0\uc11c\ub3c4 \uc591\ud638\ud55c \uc131\ub2a5\uc744 \ubc1c\ud718\ud558\ubbc0\ub85c \uc88b\uc740 \uc120\ud0dd\uc785\ub2c8\ub2e4.<\/p>\n<p>Mimalloc\uc740 \ud799\uc744 \ud398\uc774\uc9c0\ub85c \ucc44\uc6b0\uace0 \ud398\uc774\uc9c0 \ube14\ub85d\uc73c\ub85c \ucc44\uc6c1\ub2c8\ub2e4<em>. <\/em> \uac01 \ud398\uc774\uc9c0\uc5d0\ub294 \ube14\ub85d\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc73c\uba70, \uac01 \ud398\uc774\uc9c0 \ub0b4\uc758 \ube14\ub85d \ud06c\uae30\ub294 \ubaa8\ub450 \ub3d9\uc77c\ud569\ub2c8\ub2e4. \ubaa9\ub85d\uacfc \uc0ac\uc804 \uc561\uc138\uc2a4\uc5d0 \uba87 \uac00\uc9c0 \uc81c\ud55c\uc744 \ucd94\uac00\ud568\uc73c\ub85c\uc368 \uac00\ube44\uc9c0 \uceec\ub809\ud130\ub294 \ubaa8\ub4e0 \uac1d\uccb4\ub97c \ucc3e\uae30 \uc704\ud574 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linked_list\" target=\"_blank\" rel=\"noopener\">\uc5f0\uacb0 \ubaa9\ub85d<\/a>\uc744 \uc720\uc9c0\ud560 \ud544\uc694\uac00 \uc5c6\uc73c\uba70, \uc7a0\uae08\uc744 \ud68d\ub4dd\ud558\uc9c0 \uc54a\uace0\ub3c4 \ubaa9\ub85d\uacfc \uc0ac\uc804\uc5d0 \ub300\ud55c \uc77d\uae30 \uc561\uc138\uc2a4\ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586300\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-23.png\" alt=\"\" width=\"1280\" height=\"720\" \/><\/figure>\n<p>GIL \uc81c\uac70\uc5d0 \ub300\ud574 \ub354 \uae4a\uc774 \uc788\ub294 \ub0b4\uc6a9\ub4e4\uc774 \ub9ce\uc9c0\ub9cc \uc5ec\uae30\uc11c \ubaa8\ub450 \ub2e4\ub8e8\ub294 \uac83\uc740 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/peps.python.org\/pep-0703\/\" target=\"_blank\" rel=\"noopener\">PEP 703 \u2013 CPython\uc5d0\uc11c \uc804\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \uc7a0\uae08\uc744 \uc120\ud0dd \uc0ac\ud56d\uc73c\ub85c \ub9cc\ub4e4\uae30<\/a>\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"difference-in-performance-with-and-without-the-gil\" class=\"wp-block-heading\">GIL\uc774 \uc788\ub294 \uacbd\uc6b0\uc640 \uc5c6\ub294 \uacbd\uc6b0\uc758 \uc131\ub2a5 \ucc28\uc774<\/h2>\n<p>Python 3.13\uc740 \uc790\uc720 \uc2a4\ub808\ub4dc \uc635\uc158\uc744 \uc81c\uacf5\ud558\ubbc0\ub85c \ud45c\uc900 Python 3.13 \ubc84\uc804\uacfc \uc790\uc720 \uc2a4\ub808\ub4dc \ubc84\uc804\uc758 \uc131\ub2a5\uc744 \ube44\uad50\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 id=\"install-thread-free-python\" class=\"wp-block-heading\">\uc790\uc720 \uc2a4\ub808\ub4dc Python \uc124\uce58<\/h3>\n<p><a href=\"https:\/\/github.com\/pyenv\/pyenv\" target=\"_blank\" rel=\"noopener\">pyenv<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub450 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4. \ud45c\uc900 \ubc84\uc804(\uc608: 3.13.5)\uacfc \uc790\uc720 \uc2a4\ub808\ub4dc \ubc84\uc804(\uc608: 3.13.5t)\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub610\ub294 <a href=\"http:\/\/python.org\" target=\"_blank\" rel=\"noopener\">Python.org<\/a>\uc5d0\uc11c \uc124\uce58 \ud504\ub85c\uadf8\ub7a8\uc744 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc790\uc720 \uc2a4\ub808\ub4dc Python\uc744 \uc124\uce58\ud558\ub824\uba74 \uc124\uce58\ud558\ub294 \ub3d9\uc548 <em>Customize(\uc0ac\uc6a9\uc790 \uc9c0\uc815)<\/em> \uc635\uc158\uc744 \uc120\ud0dd\ud558\uace0 \ucd94\uac00 \uc0c1\uc790\ub97c \uc120\ud0dd\ud558\uc138\uc694(<a href=\"https:\/\/til.simonwillison.net\/python\/trying-free-threaded-python\" target=\"_blank\" rel=\"noopener\">\uc774 \ube14\ub85c\uadf8 \uae00\uc758 \uc608\uc2dc \ucc38\uc870<\/a>).<\/p>\n<p>\ub450 \ubc84\uc804\uc744 \ubaa8\ub450 \uc124\uce58\ud558\uba74 PyCharm \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc778\ud130\ud504\ub9ac\ud130\ub85c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800, \uc624\ub978\ucabd \ud558\ub2e8\uc5d0 \uc788\ub294 Python \uc778\ud130\ud504\ub9ac\ud130\uc758 \uc774\ub984\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586311\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-24.png\" alt=\"\" width=\"960\" height=\"328\" \/><\/figure>\n<p>\uba54\ub274\uc5d0\uc11c <em>Add New Interpreter(\uc0c8 \uc778\ud130\ud504\ub9ac\ud130 \ucd94\uac00)<\/em>\ub97c \uc120\ud0dd\ud55c \ub2e4\uc74c, <em>Add Local Interpreter(\uc9c0\uc5ed \uc778\ud130\ud504\ub9ac\ud130 \ucd94\uac00)<\/em>\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586322\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-25.png\" alt=\"\" width=\"1600\" height=\"575\" \/><\/figure>\n<p><em>Select existing(\uae30\uc874 \ud56d\ubaa9 \uc120\ud0dd)<\/em>\uc744 \uc120\ud0dd\ud558\uace0 \uc778\ud130\ud504\ub9ac\ud130 \uacbd\ub85c\uac00 \ub85c\ub4dc\ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4(\uc800\ucc98\ub7fc \uc778\ud130\ud504\ub9ac\ud130\uac00 \ub9ce\uc73c\uba74 \uc2dc\uac04\uc774 \uc880 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4). \uadf8\ub7f0 \ub2e4\uc74c <em>Python path(Python \uacbd\ub85c)<\/em> \ub4dc\ub86d\ub2e4\uc6b4 \uba54\ub274\uc5d0\uc11c \ubc29\uae08 \uc124\uce58\ud55c \uc0c8 \uc778\ud130\ud504\ub9ac\ud130\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586333\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-26.png\" alt=\"\" width=\"1538\" height=\"1100\" \/><\/figure>\n<p><em>OK(\ud655\uc778)<\/em>\ub97c \ud074\ub9ad\ud558\uc5ec \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e4\ub978 \uc778\ud130\ud504\ub9ac\ud130\uc5d0\ub3c4 \uac19\uc740 \ub2e8\uacc4\ub97c \ubc18\ubcf5\ud569\ub2c8\ub2e4. \uc774\uc81c \uc624\ub978\ucabd \ud558\ub2e8\uc5d0 \uc788\ub294 \uc778\ud130\ud504\ub9ac\ud130 \uc774\ub984\uc744 \ub2e4\uc2dc \ud074\ub9ad\ud558\uba74 \uc704\uc758 \uc774\ubbf8\uc9c0\uc640 \uac19\uc774 \uc5ec\ub7ec \uac1c\uc758 Python 3.13 \uc778\ud130\ud504\ub9ac\ud130\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/p>\n<h3 id=\"testing-with-a-cpu-bounded-process\" class=\"wp-block-heading\">CPU \uc9d1\uc57d\uc801 \ud504\ub85c\uc138\uc2a4\ub85c \ud14c\uc2a4\ud2b8<\/h3>\n<p>\ub2e4\uc74c\uc73c\ub85c, \uc5ec\ub7ec \ubc84\uc804\uc744 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \uc2a4\ud06c\ub9bd\ud2b8\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/06\/concurrency-in-async-await-and-threading\/#cpu-bound-tasks\">\uc774 \ube14\ub85c\uadf8 \uc2dc\ub9ac\uc988\uc758 1\ubd80<\/a>\uc5d0\uc11c CPU \uc9d1\uc57d\uc801 \ud504\ub85c\uc138\uc2a4\uc758 \uc18d\ub3c4\ub97c \ub192\uc774\ub824\uba74 \uc9c4\uc815\ud55c \uba40\ud2f0\uc2a4\ub808\ub529\uc774 \ud544\uc694\ud558\ub2e4\uace0 \uc124\uba85\ud588\uc2b5\ub2c8\ub2e4. GIL\uc744 \uc81c\uac70\ud558\uc5ec \uc9c4\uc815\ud55c \uba40\ud2f0\uc2a4\ub808\ub529\uc774 \uc2e4\ud589\ub418\uace0 Python\uc774 \ub354 \ube68\ub77c\uc9c0\ub294\uc9c0 \ud655\uc778\ud558\ub824\uba74 \uc5ec\ub7ec \uc2a4\ub808\ub4dc\uc5d0\uc11c CPU\ub97c \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc138\uc2a4\ub85c \ud14c\uc2a4\ud2b8\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc81c\uac00 <a href=\"https:\/\/www.jetbrains.com\/junie\/\" target=\"_blank\" rel=\"noopener\">Junie<\/a>\uc5d0\uac8c \uc0dd\uc131\ud574\ub2ec\ub77c\uace0 \ud55c \uc2a4\ud06c\ub9bd\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4(\ucd5c\uc885\uc801\uc73c\ub85c \uba87 \uac00\uc9c0\ub97c \uc218\uc815\ud588\uc74c).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import time\nimport multiprocessing  # Kept for CPU count\nfrom concurrent.futures import ThreadPoolExecutor\nimport sys\n\n\n\n\ndef is_prime(n):\n   \"\"\"Check if a number is prime (CPU-intensive operation).\"\"\"\n   if n &lt;= 1:\n       return False\n   if n &lt;= 3:\n       return True\n   if n % 2 == 0 or n % 3 == 0:\n       return False\n   i = 5\n   while i * i &lt;= n:\n       if n % i == 0 or n % (i + 2) == 0:\n           return False\n       i += 6\n   return True\n\n\n\n\ndef count_primes(start, end):\n   \"\"\"Count prime numbers in a range.\"\"\"\n   count = 0\n   for num in range(start, end):\n       if is_prime(num):\n           count += 1\n   return count\n\n\n\n\ndef run_single_thread(range_size, num_chunks):\n   \"\"\"Run the prime counting task in a single thread.\"\"\"\n   chunk_size = range_size \/\/ num_chunks\n   total_count = 0\n\n\n   start_time = time.time()\n\n\n   for i in range(num_chunks):\n       start = i * chunk_size + 1\n       end = (i + 1) * chunk_size + 1 if i &lt; num_chunks - 1 else range_size + 1\n       total_count += count_primes(start, end)\n\n\n   end_time = time.time()\n\n\n   return total_count, end_time - start_time\n\n\n\n\ndef thread_task(start, end):\n   \"\"\"Task function for threads.\"\"\"\n   return count_primes(start, end)\n\n\n\n\ndef run_multi_thread(range_size, num_threads, num_chunks):\n   \"\"\"Run the prime counting task using multiple threads.\"\"\"\n   chunk_size = range_size \/\/ num_chunks\n   total_count = 0\n\n\n   start_time = time.time()\n\n\n   with ThreadPoolExecutor(max_workers=num_threads) as executor:\n       futures = []\n       for i in range(num_chunks):\n           start = i * chunk_size + 1\n           end = (i + 1) * chunk_size + 1 if i &lt; num_chunks - 1 else range_size + 1\n           futures.append(executor.submit(thread_task, start, end))\n\n\n       for future in futures:\n           total_count += future.result()\n\n\n   end_time = time.time()\n\n\n   return total_count, end_time - start_time\n\n\n\n\ndef main():\n   # Fixed parameters\n   range_size = 1000000  # Range of numbers to check for primes\n   num_chunks = 16       # Number of chunks to divide the work into\n   num_threads = 4       # Fixed number of threads for multi-threading test\n\n\n   print(f\"Python version: {sys.version}\")\n   print(f\"CPU count: {multiprocessing.cpu_count()}\")\n   print(f\"Range size: {range_size}\")\n   print(f\"Number of chunks: {num_chunks}\")\n   print(\"-\" * 60)\n\n\n   # Run single-threaded version as baseline\n   print(\"Running single-threaded version (baseline)...\")\n   count, single_time = run_single_thread(range_size, num_chunks)\n   print(f\"Found {count} primes in {single_time:.4f} seconds\")\n   print(\"-\" * 60)\n\n\n   # Run multi-threaded version with fixed number of threads\n   print(f\"Running multi-threaded version with {num_threads} threads...\")\n   count, thread_time = run_multi_thread(range_size, num_threads, num_chunks)\n   speedup = single_time \/ thread_time\n   print(f\"Found {count} primes in {thread_time:.4f} seconds (speedup: {speedup:.2f}x)\")\n   print(\"-\" * 60)\n\n\n   # Summary\n   print(\"SUMMARY:\")\n   print(f\"{'Threads':&lt;10} {'Time (s)':&lt;12} {'Speedup':&lt;10}\")\n   print(f\"{'1 (baseline)':&lt;10} {single_time:&lt;12.4f} {'1.00x':&lt;10}\")\n   print(f\"{num_threads:&lt;10} {thread_time:&lt;12.4f} {speedup:.2f}x\")\n\n\nif __name__ == \"__main__\":\n   main()\n<\/pre>\n<p>\ub2e4\uc591\ud55c Python \uc778\ud130\ud504\ub9ac\ud130\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ub354 \uc27d\uac8c \uc2e4\ud589\ud560 \uc218 \uc788\ub3c4\ub85d PyCharm \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc2e4\ud589 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub9e8 \uc704\uc5d0\uc11c <em>Run(\uc2e4\ud589)<\/em> \ubc84\ud2bc(<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/AD_4nXcRz0HogcsseQcC85-vSwRJhBWhiZCysBUZjcuu1uQYusTx-hj6h-l4FAs_HUE1gcJV5kjSjPuUu1opfKgu6sH5G9epkDlMMw0fBRPyReunr-DgSpg5O_6QTIYROqOaiMHGAX42vg-1.png\" width=\"30\" height=\"23\" \/>) \uc606\uc5d0 \uc788\ub294 \ub4dc\ub86d\ub2e4\uc6b4 \uba54\ub274\uc5d0\uc11c <em>Edit Configurations(\uad6c\uc131 \ud3b8\uc9d1)\u2026<\/em>\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/AD_4nXeLJtj8xjnN-WQM7UQAop3RCg1hSElHa9WqFMBgXWGyxaxg07kOEhYnBV2i1WOnw5fUB_LsN-QWXidRJ-WMUVAkjF9aSVws684Jbnnoc8P-t_EDD622RghKpL5LjckKoKf251If3A-1.png\" width=\"391\" height=\"238\" \/><\/p>\n<p>\uc67c\ucabd \uc0c1\ub2e8\uc5d0 \uc788\ub294 + \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uace0 <em>Add New Configuration(\uc0c8 \uad6c\uc131 \ucd94\uac00)<\/em> \ub4dc\ub86d\ub2e4\uc6b4 \uba54\ub274\uc5d0\uc11c Python\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586344\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-27.png\" alt=\"\" width=\"680\" height=\"1130\" \/><\/figure>\n<p>\uc5b4\ub5a4 \uc778\ud130\ud504\ub9ac\ud130\uac00 \uc0ac\uc6a9\ub418\uace0 \uc788\ub294\uc9c0 \uc54c \uc218 \uc788\ub294 \uc774\ub984\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4(\uc608\ub97c \ub4e4\uc5b4 3.13.5\uc640 3.15.3t). \uc544\ub798\uc5d0 \ud45c\uc2dc\ub41c \ub300\ub85c \uc62c\ubc14\ub978 \uc778\ud130\ud504\ub9ac\ud130\ub97c \uc120\ud0dd\ud558\uace0 \ud14c\uc2a4\ud2b8 \uc2a4\ud06c\ub9bd\ud2b8 \uc774\ub984\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-586355\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/07\/image-28.png\" alt=\"\" width=\"1600\" height=\"1148\" \/><\/figure>\n<p>\uac01 \uc778\ud130\ud504\ub9ac\ud130\uc5d0 \ub300\ud574 \ud558\ub098\uc529 \ub450 \uac1c\uc758 \uad6c\uc131\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c <em>OK(\ud655\uc778)<\/em>\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uad6c\uc131\uc744 \uc120\ud0dd\ud558\uace0 \uc0c1\ub2e8\uc758 <em>Run(\uc2e4\ud589)<\/em> \ubc84\ud2bc(<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/AD_4nXcRz0HogcsseQcC85-vSwRJhBWhiZCysBUZjcuu1uQYusTx-hj6h-l4FAs_HUE1gcJV5kjSjPuUu1opfKgu6sH5G9epkDlMMw0fBRPyReunr-DgSpg5O_6QTIYROqOaiMHGAX42vg-1.png\" width=\"30\" height=\"23\" \/>)\uc744 \ud074\ub9ad\ud558\uba74 GIL\uc744 \ud3ec\ud568\ud558\uac70\ub098 \ud3ec\ud568\ud558\uc9c0 \uc54a\uace0 \ud14c\uc2a4\ud2b8 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc27d\uac8c \uc120\ud0dd\ud558\uace0 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 id=\"comparing-the-results\" class=\"wp-block-heading\">\uacb0\uacfc \ube44\uad50<\/h3>\n<p>GIL\uc774 \uc0ac\uc6a9\ub41c \ud45c\uc900 \ubc84\uc804 3.13.5\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ub098\uc635\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Python version: 3.13.5 (main, Jul 10 2025, 20:33:15) [Clang 17.0.0 (clang-1700.0.13.5)]\nCPU count: 8\nRange size: 1000000\nNumber of chunks: 16\n------------------------------------------------------------\nRunning single-threaded version (baseline)...\nFound 78498 primes in 1.1930 seconds\n------------------------------------------------------------\nRunning multi-threaded version with 4 threads...\nFound 78498 primes in 1.2183 seconds (speedup: 0.98x)\n------------------------------------------------------------\nSUMMARY:\nThreads    Time (s)     Speedup   \n1 (baseline) 1.1930       1.00x     \n4          1.2183       0.98x\n<\/pre>\n<p>\ubcf4\uc2dc\ub2e4\uc2dc\ud53c, 4 \uc2a4\ub808\ub4dc \ubc84\uc804\uc744 \uc2e4\ud589\ud560 \ub54c\uc640 \uae30\uc900\uc778 \ub2e8\uc77c \uc2a4\ub808\ub4dc\ub97c \uc2e4\ud589\ud560 \ub54c \uc18d\ub3c4\uc5d0 \ud070 \ubcc0\ud654\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \uc790\uc720 \uc2a4\ub808\ub4dc \ubc84\uc804 3.13.5t\ub97c \uc2e4\ud589\ud558\uba74 \uc5b4\ub5a4 \uacb0\uacfc\uac00 \ub098\uc624\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Python version: 3.13.5 experimental free-threading build (main, Jul 10 2025, 20:36:28) [Clang 17.0.0 (clang-1700.0.13.5)]\nCPU count: 8\nRange size: 1000000\nNumber of chunks: 16\n------------------------------------------------------------\nRunning single-threaded version (baseline)...\nFound 78498 primes in 1.5869 seconds\n------------------------------------------------------------\nRunning multi-threaded version with 4 threads...\nFound 78498 primes in 0.4662 seconds (speedup: 3.40x)\n------------------------------------------------------------\nSUMMARY:\nThreads    Time (s)     Speedup   \n1 (baseline) 1.5869       1.00x     \n4          0.4662       3.40x\n<\/pre>\n<p>\uc774\ubc88\uc5d0\ub294 \uc18d\ub3c4\uac00 \uc774\uc804\ubcf4\ub2e4 3\ubc30 \uc774\uc0c1 \ube68\ub77c\uc84c\uc2b5\ub2c8\ub2e4. \ub450 \uacbd\uc6b0 \ubaa8\ub450 \uba40\ud2f0\uc2a4\ub808\ub529\uc758 \uc624\ubc84\ud5e4\ub4dc\uac00 \uc788\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \ub530\ub77c\uc11c \uc9c4\uc815\ud55c \uba40\ud2f0\uc2a4\ub808\ub529\uc744 \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 4\uac1c \uc2a4\ub808\ub4dc\uc5d0\uc11c 4\ubc30\uc758 \uc18d\ub3c4\uac00 \ub098\uc624\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"conclusion\" class=\"wp-block-heading\">\uacb0\ub860<\/h2>\n<p>Faster Python \ube14\ub85c\uadf8 \uc2dc\ub9ac\uc988 2\ubd80\uc5d0\uc11c\ub294 \uacfc\uac70\uc5d0 Python GIL\uc744 \uc0ac\uc6a9\ud588\ub358 \uc774\uc720, \uba40\ud2f0\ud504\ub85c\uc138\uc2f1\uc744 \uc0ac\uc6a9\ud558\uc5ec GIL\uc758 \ud55c\uacc4\ub97c \uc6b0\ud68c\ud558\ub294 \ubc29\ubc95, \uadf8\ub9ac\uace0 GIL\uc744 \uc81c\uac70\ud558\ub294 \ud504\ub85c\uc138\uc2a4\uc640 \ud6a8\uacfc\uc5d0 \ub300\ud574 \ub17c\uc758\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc744 \uc791\uc131\ud560 \ub2f9\uc2dc Python\uc758 \uc790\uc720 \uc2a4\ub808\ub4dc \ubc84\uc804\uc740 \uc5ec\uc804\ud788 \uae30\ubcf8 \ubc84\uc804\uc774 \uc544\ub2c8\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ucee4\ubba4\ub2c8\ud2f0\uc640 \ud0c0\uc0ac \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ucc44\ud0dd\uc73c\ub85c \uc778\ud574 \uc55e\uc73c\ub85c\ub294 \uc790\uc720 \uc2a4\ub808\ub4dc \ubc84\uc804\uc758 Python\uc774 \ud45c\uc900\uc774 \ub420 \uac83\uc73c\ub85c \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c\ub294 \uae30\ub300\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ubc1c\ud45c\uc5d0 \ub530\ub974\uba74, Python 3.14\uc5d0\ub294 \uc2e4\ud5d8 \ub2e8\uacc4\ub97c \ub118\uc5b4\uc11c\ub294 \uc790\uc720 \uc2a4\ub808\ub4dc \ubc84\uc804\uc774 \ud3ec\ud568\ub420 \uc608\uc815\uc774\uc9c0\ub9cc, \uc774\ub294 \uc120\ud0dd \uc0ac\ud56d\uc73c\ub85c \ub0a8\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.jetbrains.com\/ko-kr\/pycharm\/\" target=\"_blank\" rel=\"noopener\">PyCharm<\/a>\uc740 \uc18d\ub3c4\uc640 \uc815\ud655\uc131\uc744 \ubcf4\uc7a5\ud558\uba70 \ucd5c\uace0 \uc218\uc900\uc758 Python \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ubaa8\ub4e0 \ucf54\ub529 \uc694\uad6c \uc0ac\ud56d\uc5d0 \ub300\ud574 \uac00\uc7a5 \uc2a4\ub9c8\ud2b8\ud55c \ucf54\ub4dc \uc644\uc131, PEP 8 \uc900\uc218, \uc2a4\ub9c8\ud2b8 \ub9ac\ud329\ud130\ub9c1 \ubc0f \uac80\uc0ac \uae30\ub2a5\uc744 \ud65c\uc6a9\ud558\uc138\uc694. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \ubcf4\uc5ec \ub4dc\ub838\ub4ef\uc774 PyCharm\uc740 Python \uc778\ud130\ud504\ub9ac\ud130\uc640 \uc2e4\ud589 \uad6c\uc131\uc5d0 \ub300\ud55c \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc124\uc815\uc744 \uc81c\uacf5\ud558\ubbc0\ub85c \uba87 \ubc88\uc758 \ud074\ub9ad\ub9cc\uc73c\ub85c \ub2e4\uc591\ud55c Python \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub9de\uac8c \uc778\ud130\ud504\ub9ac\ud130\ub97c \uc804\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/ko-kr\/pycharm\/\" target=\"\" rel=\"noopener\">PyCharm \uc9c0\uae08 \ub2e4\uc6b4\ub85c\ub4dc<\/a><\/div>\n<\/div>\n<div>\u00a0<\/div>\n<div><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/div>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/01\/CheukTingHo-Kimono-e1738750639162-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Cheuk Ting Ho\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Cheuk Ting Ho<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1191,"featured_media":592659,"comment_status":"closed","ping_status":"closed","template":"","categories":[1401,2347],"tags":[8056,5377],"cross-post-tag":[8851],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm\/592690"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/1191"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=592690"}],"version-history":[{"count":8,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm\/592690\/revisions"}],"predecessor-version":[{"id":650331,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm\/592690\/revisions\/650331"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/592659"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=592690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=592690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=592690"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=592690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}