ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python.

Бпособы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Python.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ?

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ процСссами.

Асинхронный Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π½Π΅ являСтся Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΌ ( threading ), Π½ΠΈ многопроцСссорным ( multiprocessing ). По сути, это однопоточная, однопроцСссная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΈ Π½Π΅ относится ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ вычислСниям.

Π£ Python Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, которая услоТняСт ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Она называСтся GIL, сокращСнно ΠΎΡ‚ Global Interpreter Lock. GIL Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ядСр процСссора.

GIL Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π² Python ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ CPython Π½Π΅ являСтся потокобСзопасным. ИмСя Ρ‚Π°ΠΊΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Python ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ условий Π³ΠΎΠ½ΠΊΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ условия Π³ΠΎΠ½ΠΊΠΈ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ?

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: Ссли Π΄Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сохранит Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Ρƒ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ условий Π³ΠΎΠ½ΠΊΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΡ‚Π΅ΠΌ создания ΠΊΠΎΠΏΠΈΠΈ локального Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Алгоритм планирования доступа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Когда нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΠΎ нСльзя ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ доступа ΠΊ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ зависит ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° планирования. ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ. Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ оТидаСшь.

Если ΠΏΠΎΡ‚ΠΎΠΊ thread_one ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ thread_two Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ 12:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ порядок выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π‘Π΅Π· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² планирования доступа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ ошибки ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ произвСсти ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, происходят случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вызывая бСспорядочноС ΠΈ нСпрСдсказуСмоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

ИсслСдованиС Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ вычислСниям Π² Python.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для сравнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² вычислСний. Π’ΠΎ всСх ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ функция, называСмая heavy() :

Ѐункция heavy() прСдставляСт собой Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ. Π­Ρ‚ΠΎ функция связана со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ядра процСссора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ матСматичСскиС вычислСния. Если ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Π²ΠΎ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ЦП Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ 100%.

Π‘ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Ρ‚Π΅ΠΌ самым исслСдуя различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Python, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

КаТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Python ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ основной ΠΏΠΎΡ‚ΠΎΠΊ. НиТС прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для запуска Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ heavy() Π² ΠΎΠ΄Π½ΠΎΠΌ основном ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ядра процСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ эталоном с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния скорости выполнСния:

ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, оказался ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 2 Ρ€Π°Π·Π° быстрСС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° созданиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π² нашСм случаС создаСтся 4 ΠΏΠΎΡ‚ΠΎΠΊΠ°) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Если Π±Ρ‹ функция heavy() ΠΈΠΌΠ΅Π»Π° ΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ сСтСвыС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ ΠΈ Π΄Π°Π»ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости!

Π”Π°ΠΆΠ΅ Ссли Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π½Π° 80 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΏΠ°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… сСкунд, Ρ‚ΠΎ ΠΊΠΎΠ΄ всС Ρ€Π°Π²Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π·Π° Π΄Π²Π΅ сСкунды, Ρ‚. ΠΊ. ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΡƒΠΆΠ½ΠΎ врСмя Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ запуск ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅! ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСссор ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° ядро, Π·Π°Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ быстро. НСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±Π΅Π·Π³Ρ€Π°Π½ΠΈΡ‡Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ, Ρ‡Π΅ΠΌ Π·Π°Π»ΠΎΠΆΠΈΠ» ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ дольшС ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Ρ‚ сСбя нСпрСдсказуСмым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ зависания).

Код выполнился ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 5 Ρ€Π°Π· быстрСС. Π­Ρ‚ΠΎ прСкрасно дСмонстрируСт Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости вычислСний ΠΎΡ‚ количСства ядСр процСссора.

ИспользованиС многопроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с ΠΏΡƒΠ»ΠΎΠΌ.

Из Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ multiprocessing ΠΈ shared array

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅.

Python Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык. Бвязка Python + NumPy + Matplotlib, Π½Π° ΠΌΠΎΠΉ взгляд, сСйчас ΠΎΠ΄Π½Π° ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… расчётов ΠΈ быстрого прототипирования Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Но Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ инструмСнта Π΅ΡΡ‚ΡŒ свои свСтлыС ΠΈ Ρ‚Ρ‘ΠΌΠ½Ρ‹Π΅ стороны. Одной ΠΈΠ· самых дискутируСмых особСнностСй Python являСтся GIL – Global Interpreter Lock. Π― Π±Ρ‹ отнёс эту ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊ Ρ‚Ρ‘ΠΌΠ½ΠΎΠΉ сторонС инструмСнта. Π₯отя ΠΌΠ½ΠΎΠ³ΠΈΠ΅ со ΠΌΠ½ΠΎΠΉ Π½Π΅ согласятся.

Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ GIL Π½Π΅ позволяСт Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Python эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π—Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΈ GIL ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ GIL Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ эффСктивнСС. Но Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ GIL ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния с использованиСм мноТСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹. А это достаточно сильноС ограничСния Π² соврСмСнном многоядСрном ΠΌΠΈΡ€Π΅.

Один ΠΈΠ· способов прСодолСния GIL ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° C++ Π±Ρ‹Π» Π½Π΅Π΄Π°Π²Π½ΠΎ рассмотрСн Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅: ИспользованиС Python Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π° C++. Π― ΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ прСодолСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ GIL, основанный Π½Π° multiprocessing ΠΈ shared array. На ΠΌΠΎΠΉ взгляд, этот способ позволяСт достаточно просто ΠΈ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСссы ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π² стилС мноТСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ памяти.

Π—Π°Π΄Π°Ρ‡Π°.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Π’ Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС Π·Π°Π΄Π°Π½Ρ‹ N Ρ‚ΠΎΡ‡Π΅ΠΊ v0, v1, …, vN. ВрСбуСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π·Π°Π²ΠΈΡΡΡ‰ΡƒΡŽ ΠΎΡ‚ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ NxN со значСниями этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ возьмСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ: f = r^3 / 12 + r^2 / 6. Π­Ρ‚ΠΎΡ‚ тСст, Π½Π° самом Π΄Π΅Π»Π΅, Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠΆ ΠΈ синтСтичСский. На вычислСнии Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ расстояния основана RBF интСрполяция, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… областях Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ.

Бпособ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. image loader. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:
Π’ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ каТдая строка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ нСзависимо. Из ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ сформируСм нСзависимыС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ помСстим ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ (см. рис. 1). Запустим нСсколько процСссов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтит ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ с ΠΊΠΎΠ΄ΠΎΠΌ Β«endΒ». Π’ этом случаС процСсс Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

РСализация Π½Π° Python.

Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Python Ρƒ нас Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π²Π° Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: mpCalcDistance(nodes) ΠΈ
mpCalcDistance_Worker(nodes, queue, arrD). ΠœΠ΅Ρ‚ΠΎΠ΄ mpCalcDistance(nodes) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ список ΡƒΠ·Π»ΠΎΠ², создаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ памяти, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΈ запускаСт процСссы. ΠœΠ΅Ρ‚ΠΎΠ΄ mpCalcDistance_Worker(nodes, queue, arrD) это Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² собствСнном ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ список ΡƒΠ·Π»ΠΎΠ², ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ памяти. Рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ mpCalcDistance(nodes)

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ памяти:

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ. КаТдоС Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ просто Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ строчСк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ None это ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСсса:

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ процСссы ΠΈ ΠΆΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° Π½Π΅ закончится ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ:

Из области ΠΎΠ±Ρ‰Π΅ΠΉ памяти Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ:

ΠœΠ΅Ρ‚ΠΎΠ΄ mpCalcDistance_Worker(nodes, queue, arrD)

ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:

Пока Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ Π±Π΅Ρ€Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ выполняСм расчСт:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Π‘Ρ€Π΅Π΄Π° выполнСния: двухядСрный процСссор, Ubuntu 12.04, 64bit.
ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. image loader. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:
ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. image loader. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:
На ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΈ Π΄Π²ΡƒΡ…ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ расчСта для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… N. На Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ расчСта ΠΊ Π΄Π²ΡƒΡ…ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ начиная с N = 500 ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΆΠ΅ сущСствСнноС ускорСниС расчСта.

ΠžΡ‡Π΅Π½ΡŒ интСрСсный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получаСтся Π² Ρ€Π°ΠΉΠΎΠ½Π΅ числа N = 2000. Π’ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΉ скачок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ расчСта, Π° ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ расчСтС коэффициСнт ускорСния Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 2. Π― объясняю это эффСктом кэша. Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² кэш. А Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΡƒΠΆΠ΅ Π½Π΅Ρ‚.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ использованиС процСссов ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ памяти, Π½Π° ΠΌΠΎΠΉ взгляд, достаточно просто позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ограничСния GIL.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Python. Π£Ρ€ΠΎΠΊ 22. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈ процСссы Π² Python. Π§Π°ΡΡ‚ΡŒ 1. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» статСй, посвящСнных ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π² Python. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны вопросы Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, относящиСся ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, GIL, созданиС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Python.

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. АсинхронноС – ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСзависимого выполнСния Π·Π°Π΄Π°Ρ‡.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ функция:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Π΅ΠΌΡƒ Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ x=4, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (x+1) ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возвСсти Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚:

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синхронного порядка вычислСния: ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотритС Π½Π° Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Для вычислСния значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x=4 ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ синхронного порядка: Π²Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ возвСдСния Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌ вычислим ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ просуммируСм ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ x^2 Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ произвСдСния 2*x ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вычислСния ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня ΠΈ произвСдСния ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

… значСния 4^2 ΠΈ 2*4 Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ нСзависимо Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вычислитСлями…

Π‘ΠΎΠ»Π΅Π΅ ТитСйский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ β€” это ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ сначала сварили ΠΊΠ°Ρ€Ρ‚ΠΎΡˆΠΊΡƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΌΡ‹Π»ΠΈ ΠΊΠ°ΡΡ‚Ρ€ΡŽΠ»ΡŽ, ΠΈ ΠΏΠΎΠΌΡ‹Ρ‚ΡŒ Π΅Π΅ Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅. ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ β€” это ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Π°Ρ€ΠΈΡ‚Π΅ ΠΊΠ°Ρ€Ρ‚ΠΎΡˆΠΊΡƒ ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° ΠΊΡƒΡ…Π½Π΅ – эти Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ исполнитСлями: ΠΎΠ΄ΠΈΠ½ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ занимаСтся Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΎΠΉ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠ±ΠΎΡ€ΠΊΠΎΠΉ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ 4^2 ΠΈ 2*4 ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… процСссора.

НСсколько слов о GIL

ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π² Python

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Класс Thread

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запуска этого ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠΎΠ΄ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ (Π²ΠΎ всяком случаС создаСтся Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅), Ρ‚.ΠΊ. Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ мСньшС, Ρ‚ΠΎ сообщСниС ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅.

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠ°(ΠΎΠ²) ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‚ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ join() :

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ классов наслСдников ΠΎΡ‚ Thread

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π’ Python Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Thread Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Один ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ – это ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ сигнал остановки. Доступ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ„Π»Π°Π³Ρƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ синхронизации.

Если ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚ΠΎ Π² консоли ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠŸΠΎΡ‚ΠΎΠΊΠΈ-Π΄Π΅ΠΌΠΎΠ½Ρ‹

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ (сообщСниС: β€œApp stop”).

Запустим Π΅Π΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠŸΠΎΡ‚ΠΎΠΊ остановился вмСстС с остановкой прилоТСния.

P.S.

Python. Π£Ρ€ΠΎΠΊ 22. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈ процСссы Π² Python. Π§Π°ΡΡ‚ΡŒ 1. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ : 2 коммСнтария

Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ, ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ понятно ΠΈΠ·Π»Π°Π³Π°Π΅Ρ‚Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ!
Π–Π΄Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π΄ΡƒΡ…Π΅!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Python Π² Ρ‚Ρ€ΠΈ Ρ€ΡƒΡ‡ΡŒΡ: Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (Ρ‡Π°ΡΡ‚ΡŒ 1)

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. cbc0f0509128ea8a7487ec71c1240fb531db396b. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-cbc0f0509128ea8a7487ec71c1240fb531db396b. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° cbc0f0509128ea8a7487ec71c1240fb531db396b. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. cbc0f0509128ea8a7487ec71c1240fb531db396b. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-cbc0f0509128ea8a7487ec71c1240fb531db396b. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° cbc0f0509128ea8a7487ec71c1240fb531db396b. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content ed98e5cdce1f5095669abcea26b2e57a. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content ed98e5cdce1f5095669abcea26b2e57a. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content ed98e5cdce1f5095669abcea26b2e57a. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ с Python Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ядрами процСссора, ΠΊΠ°ΠΊΠΈΠ΅ особСнности языка ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ. Но Π³Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python Π½ΡƒΠΆΠ½Π°, Π° ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚.

НСбольшоС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΠ»Ρ‹ΡˆΠΈΡ‚ ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСниях. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½ отличаСтся ΠΎΡ‚ процСсса, ΠΌΡ‹ выяснили Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Π’Π½ΡƒΡ‚Ρ€ΠΈ процСсса: ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³ mutex’ΠΎΠΌΒ». Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° Java, Π½ΠΎ тСорСтичСскиС основы многопоточности Π²Π΅Ρ€Π½Ρ‹ ΠΈ для Python. Π‘ΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π² Ρ‚ΠΎΠΌ числС, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: сСмафоры, Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (mutex), условия, события. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСгодня сдСлаСм Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° особСнностях Python, Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… ΠΈ инструмСнтах, связанных с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния Π² Python Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ:

Пока нас интСрСсуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ списка.

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Python

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 08dcd3a01a482805f96c3fafe8f0d1f6. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 08dcd3a01a482805f96c3fafe8f0d1f6. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 08dcd3a01a482805f96c3fafe8f0d1f6. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

ΠœΠ΅Ρ‚ΠΎΠ΄ 1 β€” Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉΒ»

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ· модуля threading ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ класс Thread. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠ΄Π° пишСм:

ПослС этого Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ доступна функция Thread() β€” с Π½Π΅ΠΉ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Бинтаксис Ρ‚Π°ΠΊΠΎΠΉ:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ target β€” это «цСлСвая» функция, которая опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ создаётся Π·Π°Ρ€Π°Π½Π΅Π΅. Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄Ρ‘Ρ‚ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если ΡΡƒΠ΄ΡŒΠ±Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»ΠΈΠΌΡ‹ΠΌ, Π° ΠΊΡ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ Π² ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ) опрСдСляСт ΠΈΡ… позиция, ΠΈΡ… Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ args=(x,y). Если ΠΆΠ΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ запись Π²ΠΈΠ΄Π° kwargs=<β€˜prop’:120>.

Π Π°Π΄ΠΈ удобства ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ имя. Для этого срСди ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ name=«Имя ΠΏΠΎΡ‚ΠΎΠΊΠ°Β». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ name Ρ…Ρ€Π°Π½ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null. А Π΅Ρ‰Ρ‘ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° group, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” None.

Π—Π° Π΄Π΅Π»ΠΎ! ΠŸΡƒΡΡ‚ΡŒ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выводят ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π² свой Ρ„Π°ΠΉΠ» Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число строк. Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ понадобится функция, которая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π·Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ сцСнарий. АргумСнтами Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ число строк ΠΈ имя тСкстового Ρ„Π°ΠΉΠ»Π° для записи.

Π§Ρ‚ΠΎ start() запускаСт Ρ€Π°Π½Π΅Π΅ созданный ΠΏΠΎΡ‚ΠΎΠΊ, Π²Ρ‹ ΡƒΠΆΠ΅ догадались. ΠœΠ΅Ρ‚ΠΎΠ΄ join() останавливаСт ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ свои Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π΅Π΄ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ занятыС рСсурсы. Π­Ρ‚ΠΎ называСтся «Уходя, гаситС свСт». Π—Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² прСдсказуСмый ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ явно β€” Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ снаруТи ΠΈ нСизвСстно ΠΊΠΎΠ³Π΄Π°. МСньшС риск, Ρ‡Ρ‚ΠΎ Π²ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ΡΡ случайныС Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² скобках ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½Π° сколько сСкунд Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠœΠ΅Ρ‚ΠΎΠ΄ 2 β€” «классовый»

Для ΠΏΠΎΡ‚ΠΎΠΊΠ° со слоТным ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ Thread ΠΈΠ· модуля threading. Π’ этом случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ дСйствий ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run() созданного класса. Π’Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ‚Ρ€ΡƒΡˆΠΊΡƒ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈ Π² Java.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content ec0a4f16b23d3b732768415e6dfbfaac. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content ec0a4f16b23d3b732768415e6dfbfaac. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content ec0a4f16b23d3b732768415e6dfbfaac. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ сСбя Π²Π΅Π΄ΡƒΡ‚. И для этого Π² threading Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

current_thread() β€” смотрим, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Π²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ;

active_count() β€” считаСм Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ экзСмпляры класса Thread;

enumerate() β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π•Ρ‰Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

is_alive() β€” ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ: Β«Π–ΠΈΠ² Π΅Ρ‰Ρ‘, ΠΊΡƒΡ€ΠΈΠ»ΠΊΠ°?Β» β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ true ΠΈΠ»ΠΈ false;

getName() β€” ΡƒΠ·Π½Π°Ρ‘ΠΌ имя ΠΏΠΎΡ‚ΠΎΠΊΠ°;

setName(any_name) β€” Π΄Π°Ρ‘ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΡƒ имя;

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΏΠΎΠΊΠ° ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΅ΡΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ident.

ΠžΡ‚ΡΡ€ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ функциях ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π’ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Timer всСго Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° β€” врСмя оТидания Π² сСкундах ΠΈ функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΊΠΎΠ΄Π°.

ΠŸΠΎΡ‚ΡƒΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ. Но Π΅ΡΡ‚ΡŒ особыС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ останавливаСтся вмСстС с Π½Π΅ΠΉ. Π˜Ρ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π΅ΠΌΠΎΠ½Π°ΠΌΠΈ (daemons). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ isDaemon(). Если являСтся, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Ρ‘Ρ‚ истину.

ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ создании β€” Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€œdaemon=True” ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ класса.

НС ΠΏΠΎΠ·Π΄Π½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setDaemon(daemonic).

Всё Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π½ΠΎ это Π΄Π°ΠΆΠ΅ Π½Π΅ Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΠ° айсбСрга, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ прямо сСйчас нас ΠΆΠ΄ΡƒΡ‚ Π²Π΅Π»ΠΈΠΊΠΈΠ΅ открытия.

ΠŸΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ начинаСтся. Π£ Π΄Ρ€Π΅Π²Π½Π΅Π³ΠΎ шлюза

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content c925baba43cc6b047ee20c9c77cd2078. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content c925baba43cc6b047ee20c9c77cd2078. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content c925baba43cc6b047ee20c9c77cd2078. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

ΠŸΠΈΡ‚ΠΎΠ½ слывёт Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Ρ‹ΠΌ ΠΈ простым Π² ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Ρ‹. НСльзя просто Π²Π·ΡΡ‚ΡŒ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСми прСимущСствами многопоточности Π² Python! Π”ΠΎΡ€ΠΎΠ³Ρƒ Π²Π°ΠΌ ΠΏΡ€Π΅Π³Ρ€Π°Π΄ΠΈΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΡˆΠ»ΡŽΠ·β€¦ Π”Π°ΠΆΠ΅ Ρ‚Π°ΠΊ β€” Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ шлюз (Global Interpreter Lock, ΠΎΠ½ ΠΆΠ΅ GIL), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. ВСхничСски, это ΠΎΠ΄ΠΈΠ½ Π½Π° всСх mutex, созданный ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Π°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π½ΠΈ Π² C, Π½ΠΈ Π² Java.

Π—Π°Π΄Π°Ρ‡Π° шлюза β€” ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ строго ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ± Π½Π΅ Π»Π΅Ρ‚Π°Π»ΠΈ Π½Π°ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстныС стритрСйсСры, ΠΈ Π½Π΅ создавали ΡƒΠ³Ρ€ΠΎΠ·Ρƒ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

Π‘Π΅Π· шлюза ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎΠ΄Ρ€Π΅Π·Π°Π»ΠΈ Π±Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ памяти, Π½ΠΎ это Π΅Ρ‰Π΅ Π½Π΅ всё. Они ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π·Π°ΡΡ‹ΠΏΠ°Ρ‚ΡŒ Π·Π° Ρ€ΡƒΠ»Ρ‘ΠΌ! ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π΅ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚, воврСмя ΠΈΠ»ΠΈ нСвоврСмя β€” просто усыпляСт ΠΈΡ… Π² Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠΉ извСстный ΠΌΠΎΠΌΠ΅Π½Ρ‚. Из-Π·Π° этого нСупорядочСнныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Ρƒ Π΄Ρ€ΡƒΠ³Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ рСсурсами.

Π”Π΅Π·ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ спросонок ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ собой совсСм Π½Π΅ Ρ‚Ρƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ засыпал, рискуСт Ρ€Π°Π·Π±ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ²Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ (deadlock). НапримСр, ΠΏΠ΅Ρ€Π΅Π΄ сном ΠŸΠΎΡ‚ΠΎΠΊ 1 Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ со списком, Π° послС пробуТдСния Π½Π΅ Π½Π°ΡˆΡ‘Π» Π² этом спискС элСмСнтов, Ρ‚.ΠΊ. ΠΈΡ… ΡƒΠ΄Π°Π»ΠΈΠ» ΠΈΠ»ΠΈ пСрСзаписал ΠŸΠΎΡ‚ΠΎΠΊ 2.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ, GIL Π² прСдсказуСмый ΠΌΠΎΠΌΠ΅Π½Ρ‚ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π· Π² 5 миллисСкунд для Python 3.2+) ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ: «БПАААВЬ!Β» β€” Ρ‚ΠΎΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅Π·ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΆΠ΅Π»Π°ΡŽΡ‰Π΅ΠΌΡƒ. Π”Π°ΠΆΠ΅ Ссли ΠΆΠ΅Π»Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅Ρ‚, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ всё Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Ρ‘Ρ‚, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 446b4c5448010b5b6d0e78cb07a82de4. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 446b4c5448010b5b6d0e78cb07a82de4. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 446b4c5448010b5b6d0e78cb07a82de4. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Благодаря ΡˆΠ»ΡŽΠ·Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстро, Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚. Но, ΠΊ соТалСнию, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ β€” слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΡƒ Β«Π΄ΠΎΡ€ΠΎΠΆΠ½ΠΎΠ³ΠΎ двиТСния». А Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, расчСт матСматичСских ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ поиск ΠΏΠΎ большим массивам Π΄Π°Π½Π½Ρ‹Ρ… c GIL ΠΈΠ΄ΡƒΡ‚ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄ΠΎΠ»Π³ΠΎ.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Understanding Python GIL»тСхничСский Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Gaglers Inc. ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ со стаТСм Chetan Giridhar ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Код вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа 100 000 ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡƒΡˆΠ»ΠΎ Ρƒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° эту Π·Π°Π΄Π°Ρ‡Ρƒ. ΠŸΡ€ΠΈ тСстировании Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ядрС ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ вычислСния заняли 3,4 сСкунды. Π’ΠΎΠ³Π΄Π° Π§Π΅Ρ‚Π°Π½ создал ΠΈ запустил Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. РасчСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π° Π΄Π²ΡƒΡ… ядрах длился 6,2 сСкунды. А вСдь ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСний Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° сущСствСнно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ! ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ этот экспСримСнт Π½Π° своСй машинС ΠΈ посмотритС, насколько ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½Π° Π·Π°Π΄Π°Ρ‡Π°, Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ thread2. Π― ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ²Π½ΠΎ Π²Π΄Π²ΠΎΠ΅.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ шлюз β€” наслСдиС Π²Ρ€Π΅ΠΌΡ‘Π½, ΠΊΠΎΠ³Π΄Π° программисты Π±ΠΎΡ€ΠΎΠ»ΠΈΡΡŒ Π·Π° Π΄ΠΎΡΡ‚ΠΎΠΉΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ многозадачности ΠΈ Ρƒ Π½ΠΈΡ… Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ. Но Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ сСгодня, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ- ΠΈ ΠΎΡ‡Π΅Π½ΡŒ многоядСрныС процСссоры? Как объяснил Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, Π±Π΅Π· GIL Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Python. Π•Ρ‰Ρ‘ ΡƒΠΏΠ°Π΄Ρ‘Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: Python 3 станСт ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Python 2, Π° это Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Β«ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Π΅Ρ€ΠΎΠΈ всСгда ΠΈΠ΄ΡƒΡ‚ Π² ΠΎΠ±Ρ…ΠΎΠ΄Β»

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 73f6b3af2bea895b843e10a7d01fdf4b. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 73f6b3af2bea895b843e10a7d01fdf4b. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 73f6b3af2bea895b843e10a7d01fdf4b. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Шлюз ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. Для этого ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π²Π»Π΅Ρ‡ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· внСшнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. НапримСр, шлюз Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ Π½Π° врСмя сохранСния ΠΈΠ»ΠΈ открытия Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с записью строк Π² Ρ„Π°ΠΉΠ»Ρ‹? Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вызванная функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Ρƒ Python ΠΈΠ»ΠΈ интСрфСйсу Python C API, GIL снова Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ.

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΈ нСподвластны GIL. Но это большая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°. БСйчас Π½Π°ΠΌ Π²Π°ΠΆΠ½Π΅Π΅ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для многопоточности.

Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python для слоТных Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… расчётов, ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ GIL ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Numba, NumPy, SciPy ΠΈ Π΄Ρ€. ΠžΠΏΠΈΡˆΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π² Π΄Π²ΡƒΡ… словах, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ поняли, стоит Π»ΠΈ Ρ€Π°Π·Π²Π΅Π΄Ρ‹Π²Π°Ρ‚ΡŒ это Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ дальшС.

Numba для ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ

Numba β€” динамичСски, Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Python-ΠΊΠΎΠ΄, прСвращая Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для исполнСния Π½Π° CPU ΠΈ GPU. Вакая тСхнология компиляции называСтся JIT β€” β€œJust in time”. Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π·Π° счСт ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ компиляции Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС.

Π‘ΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ставитС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹) Π² ΡƒΠ·ΠΊΠΈΡ… мСстах ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Для матСматичСских расчётов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² связкС c NumPy. Допустим, Π½ΡƒΠΆΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы β€” элСмСнт Π·Π° элСмСнтом.

ΠœΠ΅Ρ‚ΠΎΠ΄ nupmy.empty_like() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ (Π½ΠΎ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚!) Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ исходному ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Ρ‚ΠΈΠΏΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ класс jit ΠΈΠ· модуля numba ΠΈ добавляСм Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ΄Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @jit:

Π­Ρ‚ΠΎ скромноС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ способно ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 100 Ρ€Π°Π·! Если интСрСсно, посмотритС Π·Π°ΠΌΠ΅Ρ€Ρ‹ скорости матСматичСских расчётов ΠΏΡ€ΠΈ использовании Ρ€Π°Π·Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Python.

PyCUDA ΠΈ Numba для Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

Π’ графичСских вычислСниях Numba Ρ‚ΠΎΠΆΠ΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚. Она ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ модСлью CUDA, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ GPU ΠΈ Π΄Ρ€. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ графичСский процСссор ΠΈ CUDA β€” здСсь. И снова ΠΌΡ‹ встрСтимся с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами Π² CUDA, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с элСмСнтами массива, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ядра. НапримСр, ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свою ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² сСткС Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт массива:

Π“Π»Π°Π²Π½Ρ‹ΠΉ плюс этого ΠΊΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ Π½Π΅ Π² скорости исполнСния, Π° Π² прозрачности ΠΈ простотС. Π‘Π½ΠΎΠ²Π° сошлюсь Π½Π° Π₯Π°Π±Ρ€, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ сравнСниС скорости GPU-расчСтов ΠΏΡ€ΠΈ использовании Numba, PyCUDA ΠΈ эталонного Π‘ CUDA. НСбольшой спойлСр: PyCUDA позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ скорости вычислСний, сопоставимой с CΠΈ, Π° Numba ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Когда ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π°

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 7db6720b17a1537d0aaadd939dfcc7ff. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 7db6720b17a1537d0aaadd939dfcc7ff. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 7db6720b17a1537d0aaadd939dfcc7ff. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Ρ‚ΡŒ связанныС c GIL слоТности ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ многопоточности? Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ситуаций, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ нСсёт с собой большС плюсов, Ρ‡Π΅ΠΌ минусов.

Когда Π»ΡƒΡ‡ΡˆΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content baae1ca369449441924f58d91e2cb605. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content baae1ca369449441924f58d91e2cb605. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content baae1ca369449441924f58d91e2cb605. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Анонс β€” Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Python

Π‘Π°ΠΌΠΎΠ΅ смСшноС, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ GIL Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π½Π΅ прСдохраняСт наш ΠΊΠΎΠ΄ ΠΎΡ‚ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ (deadlock) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… логичСских ошибок синхронизации. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎ ΡƒΠ³Π»Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² Java, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ². Об этом ΠΈ ΠΎ Π½Π΅ упомянутых Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… модуля threading ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·.

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content ed98e5cdce1f5095669abcea26b2e57a. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content ed98e5cdce1f5095669abcea26b2e57a. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content ed98e5cdce1f5095669abcea26b2e57a. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ с Python Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ядрами процСссора, ΠΊΠ°ΠΊΠΈΠ΅ особСнности языка ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ. Но Π³Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python Π½ΡƒΠΆΠ½Π°, Π° ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚.

НСбольшоС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΠ»Ρ‹ΡˆΠΈΡ‚ ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСниях. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½ отличаСтся ΠΎΡ‚ процСсса, ΠΌΡ‹ выяснили Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Π’Π½ΡƒΡ‚Ρ€ΠΈ процСсса: ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³ mutex’ΠΎΠΌΒ». Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° Java, Π½ΠΎ тСорСтичСскиС основы многопоточности Π²Π΅Ρ€Π½Ρ‹ ΠΈ для Python. Π‘ΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π² Ρ‚ΠΎΠΌ числС, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: сСмафоры, Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (mutex), условия, события. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСгодня сдСлаСм Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° особСнностях Python, Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… ΠΈ инструмСнтах, связанных с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния Π² Python Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ:

Пока нас интСрСсуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ списка.

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Python

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 08dcd3a01a482805f96c3fafe8f0d1f6. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 08dcd3a01a482805f96c3fafe8f0d1f6. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 08dcd3a01a482805f96c3fafe8f0d1f6. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

ΠœΠ΅Ρ‚ΠΎΠ΄ 1 β€” Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉΒ»

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ· модуля threading ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ класс Thread. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠ΄Π° пишСм:

ПослС этого Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ доступна функция Thread() β€” с Π½Π΅ΠΉ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Бинтаксис Ρ‚Π°ΠΊΠΎΠΉ:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ target β€” это «цСлСвая» функция, которая опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ создаётся Π·Π°Ρ€Π°Π½Π΅Π΅. Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄Ρ‘Ρ‚ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если ΡΡƒΠ΄ΡŒΠ±Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»ΠΈΠΌΡ‹ΠΌ, Π° ΠΊΡ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ Π² ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ) опрСдСляСт ΠΈΡ… позиция, ΠΈΡ… Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ args=(x,y). Если ΠΆΠ΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ запись Π²ΠΈΠ΄Π° kwargs=<β€˜prop’:120>.

Π Π°Π΄ΠΈ удобства ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ имя. Для этого срСди ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ name=«Имя ΠΏΠΎΡ‚ΠΎΠΊΠ°Β». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ name Ρ…Ρ€Π°Π½ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null. А Π΅Ρ‰Ρ‘ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° group, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” None.

Π—Π° Π΄Π΅Π»ΠΎ! ΠŸΡƒΡΡ‚ΡŒ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выводят ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π² свой Ρ„Π°ΠΉΠ» Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число строк. Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ понадобится функция, которая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π·Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ сцСнарий. АргумСнтами Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ число строк ΠΈ имя тСкстового Ρ„Π°ΠΉΠ»Π° для записи.

Π§Ρ‚ΠΎ start() запускаСт Ρ€Π°Π½Π΅Π΅ созданный ΠΏΠΎΡ‚ΠΎΠΊ, Π²Ρ‹ ΡƒΠΆΠ΅ догадались. ΠœΠ΅Ρ‚ΠΎΠ΄ join() останавливаСт ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ свои Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π΅Π΄ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ занятыС рСсурсы. Π­Ρ‚ΠΎ называСтся «Уходя, гаситС свСт». Π—Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² прСдсказуСмый ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ явно β€” Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ снаруТи ΠΈ нСизвСстно ΠΊΠΎΠ³Π΄Π°. МСньшС риск, Ρ‡Ρ‚ΠΎ Π²ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ΡΡ случайныС Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² скобках ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½Π° сколько сСкунд Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠœΠ΅Ρ‚ΠΎΠ΄ 2 β€” «классовый»

Для ΠΏΠΎΡ‚ΠΎΠΊΠ° со слоТным ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ Thread ΠΈΠ· модуля threading. Π’ этом случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ дСйствий ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run() созданного класса. Π’Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ‚Ρ€ΡƒΡˆΠΊΡƒ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈ Π² Java.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content ec0a4f16b23d3b732768415e6dfbfaac. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content ec0a4f16b23d3b732768415e6dfbfaac. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content ec0a4f16b23d3b732768415e6dfbfaac. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ сСбя Π²Π΅Π΄ΡƒΡ‚. И для этого Π² threading Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

current_thread() β€” смотрим, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Π²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ;

active_count() β€” считаСм Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ экзСмпляры класса Thread;

enumerate() β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π•Ρ‰Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

is_alive() β€” ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ: Β«Π–ΠΈΠ² Π΅Ρ‰Ρ‘, ΠΊΡƒΡ€ΠΈΠ»ΠΊΠ°?Β» β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ true ΠΈΠ»ΠΈ false;

getName() β€” ΡƒΠ·Π½Π°Ρ‘ΠΌ имя ΠΏΠΎΡ‚ΠΎΠΊΠ°;

setName(any_name) β€” Π΄Π°Ρ‘ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΡƒ имя;

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΏΠΎΠΊΠ° ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΅ΡΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ident.

ΠžΡ‚ΡΡ€ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ функциях ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π’ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Timer всСго Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° β€” врСмя оТидания Π² сСкундах ΠΈ функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΊΠΎΠ΄Π°.

ΠŸΠΎΡ‚ΡƒΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ. Но Π΅ΡΡ‚ΡŒ особыС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ останавливаСтся вмСстС с Π½Π΅ΠΉ. Π˜Ρ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π΅ΠΌΠΎΠ½Π°ΠΌΠΈ (daemons). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ isDaemon(). Если являСтся, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Ρ‘Ρ‚ истину.

ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ создании β€” Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€œdaemon=True” ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ класса.

НС ΠΏΠΎΠ·Π΄Π½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setDaemon(daemonic).

Всё Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π½ΠΎ это Π΄Π°ΠΆΠ΅ Π½Π΅ Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΠ° айсбСрга, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ прямо сСйчас нас ΠΆΠ΄ΡƒΡ‚ Π²Π΅Π»ΠΈΠΊΠΈΠ΅ открытия.

ΠŸΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ начинаСтся. Π£ Π΄Ρ€Π΅Π²Π½Π΅Π³ΠΎ шлюза

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content c925baba43cc6b047ee20c9c77cd2078. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content c925baba43cc6b047ee20c9c77cd2078. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content c925baba43cc6b047ee20c9c77cd2078. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

ΠŸΠΈΡ‚ΠΎΠ½ слывёт Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Ρ‹ΠΌ ΠΈ простым Π² ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Ρ‹. НСльзя просто Π²Π·ΡΡ‚ΡŒ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСми прСимущСствами многопоточности Π² Python! Π”ΠΎΡ€ΠΎΠ³Ρƒ Π²Π°ΠΌ ΠΏΡ€Π΅Π³Ρ€Π°Π΄ΠΈΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΡˆΠ»ΡŽΠ·β€¦ Π”Π°ΠΆΠ΅ Ρ‚Π°ΠΊ β€” Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ шлюз (Global Interpreter Lock, ΠΎΠ½ ΠΆΠ΅ GIL), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. ВСхничСски, это ΠΎΠ΄ΠΈΠ½ Π½Π° всСх mutex, созданный ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Π°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π½ΠΈ Π² C, Π½ΠΈ Π² Java.

Π—Π°Π΄Π°Ρ‡Π° шлюза β€” ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ строго ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ± Π½Π΅ Π»Π΅Ρ‚Π°Π»ΠΈ Π½Π°ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстныС стритрСйсСры, ΠΈ Π½Π΅ создавали ΡƒΠ³Ρ€ΠΎΠ·Ρƒ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

Π‘Π΅Π· шлюза ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎΠ΄Ρ€Π΅Π·Π°Π»ΠΈ Π±Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ памяти, Π½ΠΎ это Π΅Ρ‰Π΅ Π½Π΅ всё. Они ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π·Π°ΡΡ‹ΠΏΠ°Ρ‚ΡŒ Π·Π° Ρ€ΡƒΠ»Ρ‘ΠΌ! ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π΅ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚, воврСмя ΠΈΠ»ΠΈ нСвоврСмя β€” просто усыпляСт ΠΈΡ… Π² Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠΉ извСстный ΠΌΠΎΠΌΠ΅Π½Ρ‚. Из-Π·Π° этого нСупорядочСнныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Ρƒ Π΄Ρ€ΡƒΠ³Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ рСсурсами.

Π”Π΅Π·ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ спросонок ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ собой совсСм Π½Π΅ Ρ‚Ρƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ засыпал, рискуСт Ρ€Π°Π·Π±ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ²Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ (deadlock). НапримСр, ΠΏΠ΅Ρ€Π΅Π΄ сном ΠŸΠΎΡ‚ΠΎΠΊ 1 Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ со списком, Π° послС пробуТдСния Π½Π΅ Π½Π°ΡˆΡ‘Π» Π² этом спискС элСмСнтов, Ρ‚.ΠΊ. ΠΈΡ… ΡƒΠ΄Π°Π»ΠΈΠ» ΠΈΠ»ΠΈ пСрСзаписал ΠŸΠΎΡ‚ΠΎΠΊ 2.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ, GIL Π² прСдсказуСмый ΠΌΠΎΠΌΠ΅Π½Ρ‚ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π· Π² 5 миллисСкунд для Python 3.2+) ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ: «БПАААВЬ!Β» β€” Ρ‚ΠΎΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅Π·ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΆΠ΅Π»Π°ΡŽΡ‰Π΅ΠΌΡƒ. Π”Π°ΠΆΠ΅ Ссли ΠΆΠ΅Π»Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅Ρ‚, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ всё Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Ρ‘Ρ‚, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 446b4c5448010b5b6d0e78cb07a82de4. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 446b4c5448010b5b6d0e78cb07a82de4. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 446b4c5448010b5b6d0e78cb07a82de4. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Благодаря ΡˆΠ»ΡŽΠ·Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстро, Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚. Но, ΠΊ соТалСнию, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ β€” слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΡƒ Β«Π΄ΠΎΡ€ΠΎΠΆΠ½ΠΎΠ³ΠΎ двиТСния». А Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, расчСт матСматичСских ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ поиск ΠΏΠΎ большим массивам Π΄Π°Π½Π½Ρ‹Ρ… c GIL ΠΈΠ΄ΡƒΡ‚ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄ΠΎΠ»Π³ΠΎ.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Understanding Python GIL»тСхничСский Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Gaglers Inc. ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ со стаТСм Chetan Giridhar ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Код вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа 100 000 ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡƒΡˆΠ»ΠΎ Ρƒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° эту Π·Π°Π΄Π°Ρ‡Ρƒ. ΠŸΡ€ΠΈ тСстировании Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ядрС ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ вычислСния заняли 3,4 сСкунды. Π’ΠΎΠ³Π΄Π° Π§Π΅Ρ‚Π°Π½ создал ΠΈ запустил Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. РасчСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π° Π΄Π²ΡƒΡ… ядрах длился 6,2 сСкунды. А вСдь ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСний Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° сущСствСнно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ! ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ этот экспСримСнт Π½Π° своСй машинС ΠΈ посмотритС, насколько ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½Π° Π·Π°Π΄Π°Ρ‡Π°, Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ thread2. Π― ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ²Π½ΠΎ Π²Π΄Π²ΠΎΠ΅.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ шлюз β€” наслСдиС Π²Ρ€Π΅ΠΌΡ‘Π½, ΠΊΠΎΠ³Π΄Π° программисты Π±ΠΎΡ€ΠΎΠ»ΠΈΡΡŒ Π·Π° Π΄ΠΎΡΡ‚ΠΎΠΉΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ многозадачности ΠΈ Ρƒ Π½ΠΈΡ… Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ. Но Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ сСгодня, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ- ΠΈ ΠΎΡ‡Π΅Π½ΡŒ многоядСрныС процСссоры? Как объяснил Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, Π±Π΅Π· GIL Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Python. Π•Ρ‰Ρ‘ ΡƒΠΏΠ°Π΄Ρ‘Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: Python 3 станСт ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Python 2, Π° это Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Β«ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Π΅Ρ€ΠΎΠΈ всСгда ΠΈΠ΄ΡƒΡ‚ Π² ΠΎΠ±Ρ…ΠΎΠ΄Β»

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 73f6b3af2bea895b843e10a7d01fdf4b. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 73f6b3af2bea895b843e10a7d01fdf4b. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 73f6b3af2bea895b843e10a7d01fdf4b. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Шлюз ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. Для этого ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π²Π»Π΅Ρ‡ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· внСшнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. НапримСр, шлюз Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ Π½Π° врСмя сохранСния ΠΈΠ»ΠΈ открытия Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с записью строк Π² Ρ„Π°ΠΉΠ»Ρ‹? Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вызванная функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Ρƒ Python ΠΈΠ»ΠΈ интСрфСйсу Python C API, GIL снова Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ.

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΈ нСподвластны GIL. Но это большая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°. БСйчас Π½Π°ΠΌ Π²Π°ΠΆΠ½Π΅Π΅ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для многопоточности.

Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python для слоТных Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… расчётов, ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ GIL ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Numba, NumPy, SciPy ΠΈ Π΄Ρ€. ΠžΠΏΠΈΡˆΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π² Π΄Π²ΡƒΡ… словах, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ поняли, стоит Π»ΠΈ Ρ€Π°Π·Π²Π΅Π΄Ρ‹Π²Π°Ρ‚ΡŒ это Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ дальшС.

Numba для ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ

Numba β€” динамичСски, Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Python-ΠΊΠΎΠ΄, прСвращая Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для исполнСния Π½Π° CPU ΠΈ GPU. Вакая тСхнология компиляции называСтся JIT β€” β€œJust in time”. Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π·Π° счСт ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ компиляции Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС.

Π‘ΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ставитС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹) Π² ΡƒΠ·ΠΊΠΈΡ… мСстах ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Для матСматичСских расчётов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² связкС c NumPy. Допустим, Π½ΡƒΠΆΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы β€” элСмСнт Π·Π° элСмСнтом.

ΠœΠ΅Ρ‚ΠΎΠ΄ nupmy.empty_like() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ (Π½ΠΎ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚!) Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ исходному ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Ρ‚ΠΈΠΏΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ класс jit ΠΈΠ· модуля numba ΠΈ добавляСм Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ΄Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @jit:

Π­Ρ‚ΠΎ скромноС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ способно ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 100 Ρ€Π°Π·! Если интСрСсно, посмотритС Π·Π°ΠΌΠ΅Ρ€Ρ‹ скорости матСматичСских расчётов ΠΏΡ€ΠΈ использовании Ρ€Π°Π·Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Python.

PyCUDA ΠΈ Numba для Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

Π’ графичСских вычислСниях Numba Ρ‚ΠΎΠΆΠ΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚. Она ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ модСлью CUDA, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ GPU ΠΈ Π΄Ρ€. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ графичСский процСссор ΠΈ CUDA β€” здСсь. И снова ΠΌΡ‹ встрСтимся с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами Π² CUDA, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с элСмСнтами массива, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ядра. НапримСр, ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свою ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² сСткС Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт массива:

Π“Π»Π°Π²Π½Ρ‹ΠΉ плюс этого ΠΊΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ Π½Π΅ Π² скорости исполнСния, Π° Π² прозрачности ΠΈ простотС. Π‘Π½ΠΎΠ²Π° сошлюсь Π½Π° Π₯Π°Π±Ρ€, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ сравнСниС скорости GPU-расчСтов ΠΏΡ€ΠΈ использовании Numba, PyCUDA ΠΈ эталонного Π‘ CUDA. НСбольшой спойлСр: PyCUDA позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ скорости вычислСний, сопоставимой с CΠΈ, Π° Numba ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Когда ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π°

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content 7db6720b17a1537d0aaadd939dfcc7ff. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content 7db6720b17a1537d0aaadd939dfcc7ff. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content 7db6720b17a1537d0aaadd939dfcc7ff. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Ρ‚ΡŒ связанныС c GIL слоТности ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ многопоточности? Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ситуаций, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ нСсёт с собой большС плюсов, Ρ‡Π΅ΠΌ минусов.

Когда Π»ΡƒΡ‡ΡˆΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. content baae1ca369449441924f58d91e2cb605. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-content baae1ca369449441924f58d91e2cb605. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° content baae1ca369449441924f58d91e2cb605. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими вычислСниями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠ³ΠΎ повСдСния Π² Python ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколькими способами:

Анонс β€” Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Python

Π‘Π°ΠΌΠΎΠ΅ смСшноС, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ GIL Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π½Π΅ прСдохраняСт наш ΠΊΠΎΠ΄ ΠΎΡ‚ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ (deadlock) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… логичСских ошибок синхронизации. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎ ΡƒΠ³Π»Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² Java, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ². Об этом ΠΈ ΠΎ Π½Π΅ упомянутых Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… модуля threading ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *