πŸ” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½? Π£Π·Π½Π°ΠΉΡ‚Π΅ всС ΠΎ Π³ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½Π΅ с нашСй ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ!

Π“ΠΈΠ» - это инструмСнт Π² языкС программирования Python для установки Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй ΠΈ управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. Он позволяСт ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Python ΠΈΠ· ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ PyPI (Python Package Index).

Π“ΠΈΠ» Ρ‚Π°ΠΊΠΆΠ΅ управляСт зависимостями ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈ обСспСчиваСт ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ установку. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ "requirements.txt" для указания списка зависимостСй, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ gil Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:

gil install numpy

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° установит ΠΏΠ°ΠΊΠ΅Ρ‚ numpy ΠΈΠ· рСпозитория PyPI.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½: Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½?

Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ (Global Interpreter Lock) – это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° CPython, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² выполнСния Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½?

Π’ CPython, стандартной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python, Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обСспСчСния бСзопасности ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² выполнСния. Он Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Python Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython Π½Π΅ являСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎ-бСзопасным.

Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Python для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ I/O оТидания ΠΈΠ»ΠΈ выполнСния Π·Π°Π΄Π°Ρ‡ Π½Π° сторонС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ» эксклюзивного владСния рСсурсами, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π³ΠΎΠ½ΠΊΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, связанным с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½?

Когда Python ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ инструкции. ΠŸΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ эксклюзивноС ΠΏΡ€Π°Π²ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Python. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСн.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ являСтся спСцифичным для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python, ΠΈ ΠΎΠ½ Π½Π΅ сущСствуСт Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Ρ… Python, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Jython ΠΈΠ»ΠΈ IronPython. Он являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ компромисса ΠΌΠ΅ΠΆΠ΄Ρƒ простотой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ для ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° с использованиСм Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½Π°


import threading

# Ѐункция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅
def count_up():
    counter = 0
    for _ in range(1000000):
        counter += 1

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ
thread1 = threading.Thread(target=count_up)
thread2 = threading.Thread(target=count_up)

# ЗапускаСм ΠΏΠΎΡ‚ΠΎΠΊΠΈ
thread1.start()
thread2.start()

# ОТидаСм Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
thread1.join()
thread2.join()

print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ!")

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° 'thread1' ΠΈ 'thread2', ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ 'count_up'. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСтчик Π½Π° 1 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Ρ€Π°Π·. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ ΠΆΠ΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° ΠΎΠ±Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ!".

Однако, нСсмотря Π½Π° использованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½Π° самом Π΄Π΅Π»Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполняСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ Π½Π΅ позволяСт ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Если Π²Ρ‹ запуститС этот ΠΊΠΎΠ΄, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ врСмя, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ использовали ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ – это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° CPython, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Python. Он позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π³ΠΎΠ½ΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Python.

Но Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π“ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½ осущСствляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Python ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ позволяя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для достиТСния истинной ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Python Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ многопроцСссныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ использованиС модуля multiprocessing.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π§Ρ‚ΠΎ Π’Π°ΠΊΠΎΠ΅ Global Interpreter Lock (GIL) Π’ Python?

GIL Π² Python: Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½ ΠΈ ΠΊΠ°ΠΊ с этим ΠΆΠΈΡ‚ΡŒ

ΠœΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ. Π§Ρ‚ΠΎ это ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ” Как ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ (type) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Python? πŸπŸ“š Руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ”— Как ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ событиС ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π² Python: простой Π³ΠΈΠ΄ 🐍

πŸ”§ Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ Π½Π° Python: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство

πŸ” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½? Π£Π·Π½Π°ΠΉΡ‚Π΅ всС ΠΎ Π³ΠΈΠ» ΠΏΠΈΡ‚ΠΎΠ½Π΅ с нашСй ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ!

πŸ”§ Как ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Python Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ»? πŸ“

πŸ”Ž Как вывСсти массив Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π² столбик: простой ΠΈ понятный способ

πŸ” Как Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² Python Π² Atom? πŸ”