асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python

асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. python async. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-python async. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° python async. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

По ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ строки ΠΊΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ строка ΠΊΠΎΠ΄Π°, которая Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ с сСрвСра, Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π²ΠΎ врСмя оТидания ΠΎΡ‚Π²Π΅Ρ‚Π°. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях это допустимо, Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… β€” Π½Π΅Ρ‚. Одним ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΈ (threads).

ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ряд Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΅ΡΡ‚ΡŒ ряд нСдостатков. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ слоТными ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ошибкам. Они Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: состояниС Π³ΠΎΠ½ΠΊΠΈ (race condition), взаимная (deadlock) ΠΈ активная (livelock) Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, исчСрпаниС рСсурсов (resource starvation).

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π₯отя асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ мСста ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†Π΅Π»ΠΈ β€” для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста процСссора. Когда Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ядро процСссора ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π° Ρ€Π°Π·. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ/процСссы ΠΌΠΎΠ³Π»ΠΈ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы, процСссор ΠΎΡ‡Π΅Π½ΡŒ часто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ контСкст. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, процСссор с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ сохраняСт всю ΠΊΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это потоковая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния / ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ пространства, Π³Π΄Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ процСссор, управляСт ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ контСкста. Π’ асинхронном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ контСкст ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π° Π½Π΅ с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ CPU.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΠ΅ΠΊΡ€Π΅Ρ‚Π°Ρ€ΡŒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим эти понятия Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСкрСтаря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ эффСктивСн, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ врСмя Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡΡ‚ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ выполняСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ: ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Π΅ Π·Π²ΠΎΠ½ΠΊΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ посСтитСлСй, пытаСтся Π·Π°Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ»Π΅Ρ‚Ρ‹ Π½Π° самолСт, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ встрСч ΠΈ заполняСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² встрСч, ΠΏΡ€ΠΈΠ΅ΠΌ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Ρ… Π·Π²ΠΎΠ½ΠΊΠΎΠ² ΠΈ посСтитСлСй, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ Π½Π΅ часто ΠΈ распрСдСлСны Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡΠ΅ΠΊΡ€Π΅Ρ‚Π°Ρ€ΡŒ Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ с Π°Π²ΠΈΠ°ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ, заполняя ΠΏΡ€ΠΈ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ. Когда поступит Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ, ΠΎΠ½ поставит Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ с Π°Π²ΠΈΠ°ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ Π½Π° Π·Π²ΠΎΠ½ΠΎΠΊ, Π° Π·Π°Ρ‚Π΅ΠΌ вСрнСтся ΠΊ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Ρƒ с Π°Π²ΠΈΠ°ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ. Π’ любоС врСмя, ΠΊΠΎΠ³Π΄Π° новая Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ внимания сСкрСтаря, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ. Π‘Π΅ΠΊΡ€Π΅Ρ‚Π°Ρ€ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ нСсколько Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ контСкст Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ Π΅ΠΌΡƒ врСмя. Он асинхронный.

ΠŸΠΎΡ‚ΠΎΠΊΠΈ β€” это ΠΏΡΡ‚ΡŒ сСкрСтарСй, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сСкрСтари Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ устройство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² самих Π·Π°Π΄Π°Ρ‡Π°Ρ…. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ устройство Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π·Π°Π΄Π°Ρ‡, ΠΎΠ½ΠΎ постоянно ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡΡ‚ΡŒΡŽ сСкрСтарями, Π΄Π°ΠΆΠ΅ Ссли Ρ‚Ρ€ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… сидят, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ дСлая. Около 57% (Ρ‡ΡƒΡ‚ΡŒ мСньшС, Ρ‡Π΅ΠΌ 3/5) ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста Π±Ρ‹Π»ΠΈ Π±Ρ‹ напрасны. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста процСссора являСтся нСвСроятно быстрым, ΠΎΠ½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя ΠΈ рСсурсы процСссора.

Π—Π΅Π»Π΅Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

Π—Π΅Π»Π΅Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ (green threads) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ асинхронного программирования. Π—Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ производятся Π² ΠΊΠΎΠ΄Π΅ прилоТСния, Π° Π½Π΅ Π² процСссорС. Gevent β€” извСстная Python-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для использования Π·Π΅Π»Π΅Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Gevent β€” это Π·Π΅Π»Π΅Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ сСтСвая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Eventlet. Gevent.monkey измСняСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Python Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Gevent для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ обращСния ΠΊ нСскольким URL-адрСсам:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, API-интСрфСйс Gevent выглядит Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Однако Π·Π° ΠΊΠ°Π΄Ρ€ΠΎΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сопрограммы (coroutines), Π° Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈ запускаСт ΠΈΡ… Π² Ρ†ΠΈΠΊΠ»Π΅ событий (event loop) для постановки Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ прСимущСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π±Π΅Π· понимания сопрограмм, Π½ΠΎ Π²Ρ‹ Π½Π΅ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Gevent β€” Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.

Π‘Ρ‚Π°Ρ€Ρ‚ 25 сСнтября, 2 мСсяца, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ аспСкты асинхронного программирования. Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… аспСктов β€” это Ρ†ΠΈΠΊΠ» событий. Π¦ΠΈΠΊΠ» событий β€” это ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий/Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΈ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вытягиваСт задания ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ запускаСт ΠΈΡ…. Π­Ρ‚ΠΈ задания Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ сопрограммами. Они ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой нСбольшой Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, содСрТащих, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, инструкции ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ события ΠΏΡ€ΠΈ нСобходимости Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

Ѐункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (callback)

Π’ Python ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для асинхронного программирования, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярными ΡΠ²Π»ΡΡŽΡ‚ΡΡ Tornado, Asyncio ΠΈ Gevent. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Tornado. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (callbacks) для асинхронного сСтСвого Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² β€” это функция, которая ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: «Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽΒ». Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Ρ‹ Π·Π²ΠΎΠ½ΠΈΡ‚Π΅ Π² слуТбу ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ оставляСтС свой Π½ΠΎΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ доступны, ΠΏΠ΅Ρ€Π΅Π·Π²ΠΎΠ½ΠΈΠ»ΠΈ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚Π°.
Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Tornado:

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ пСрвая строка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ handle_response провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибки. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ создано, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΈΠ·-Π·Π° Ρ†ΠΈΠΊΠ»Π° событий. Когда fetch выполняСтся, ΠΎΠ½ запускаСт HTTP-запрос, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π² Ρ†ΠΈΠΊΠ»Π΅ событий. К Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка, стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΠΊΠ» событий ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈ этом Π½ΠΈΠ³Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ сработаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π»ΡŽΠ±Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, созданныС Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‚ Ρ†ΠΈΠΊΠ» событий ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС ошибки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ.
Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² асинхронном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ СдинствСнный способ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ β€” это ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅: ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² послС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° послС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ тСряСтся доступ ΠΊ стСку ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π²Ρ‹ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ пСрСноситС большиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΎ всС ваши ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π½ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сторонниС API-интСрфСйсы, Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², Ссли ΠΎΠ½ этого Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ становится ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² дСйствуСт ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ. НапримСр, Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ API-интСрфСйса ΠΈ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° всС Ρ‚Ρ€ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ. Π’ Gevent Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ. Π’Π°ΠΌ придСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΄ΠΎΠ²Π°Ρ‚ΡŒ, сохраняя Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ провСряя Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, являСтся Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

БравнСния

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π»ΠΈΠ±ΠΎ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ. Π’ Python Π²Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π΅Π»Π΅Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ асинхронным ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΈΡ… особСнностСй:

Π—Π΅Π»Π΅Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²

Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹?

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π². Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ aiohttp вСрсии 1.3.5. Π’ послСднСй вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ синтаксис Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

НСсколько особСнностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ:

ЕдинствСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ выглядит ΠΊΠ°ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ссли Π½Π° самом Π΄Π΅Π»Π΅ это Π±Ρ‹Π» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

Async ΠΈ Await

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Python встроСна отличная асинхронная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· вспомним ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ посмотрим, Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π»ΠΈ ΠΎΠ½ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ:

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Asyncio довольно Ρ…ΠΎΡ€ΠΎΡˆ, Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Asyncio Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Python Π½Π΅Π΄Π°Π²Π½ΠΎ. Π•ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ исправлСны. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ вСсь ваш ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ асинхронным. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ асинхронных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π΅ΠΌ самым блокируя Ρ†ΠΈΠΊΠ» событий.

БущСствуСт нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² асинхронного программирования Π² Python. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π΅Π»Π΅Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΠ»ΠΈ сопрограммы. Π₯отя Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ, Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΈΠ· Π½ΠΈΡ… β€” Asyncio. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Python 3.5, Ρ‚ΠΎ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° встроСна Π² ядро ​​python.

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

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python: ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€

Когда говорят ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚ΠΎ ΠΏΠΎΠ΄ «асинхронным Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌΒ» ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΆΠ΄Ρ‘Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ процСсса, Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ нСзависимо ΠΎΡ‚ Π½Π΅Π³ΠΎ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° асинхронного программирования ΠΌΠΎΠΆΠ½ΠΎ привСсти ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, которая, работая асинхронно, Π΄Π΅Π»Π°Π΅Ρ‚ записи Π² Π»ΠΎΠ³-Ρ„Π°ΠΉΠ». Π₯отя такая ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ сбой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ свободного мСста Π½Π° дискС), Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Они смогут Π΅Ρ‘ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ, пСрСдавая Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Π΅ для записи, Π° послС этого смогут ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ своими Π΄Π΅Π»Π°ΠΌΠΈ.

асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. epbwpti391hcs adu7jr0hcpqrm. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-epbwpti391hcs adu7jr0hcpqrm. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° epbwpti391hcs adu7jr0hcpqrm. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

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

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ асинхронного ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π­Ρ‚ΠΎ β€” Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ систСмС с одноядСрным процСссором. Π’ систСмах с многоядСрными процСссорами ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ процСссом, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ядром. ΠžΠ΄Π½ΠΎΡΠ΄Π΅Ρ€Π½Ρ‹ΠΉ процСссор Π² Π½Π΅ΠΊΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³. НСльзя Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Если Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΊΠ½ΠΈΠ³Ρƒ, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΈΠ³Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ эту Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ ΠΈ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π΅Ρ‘ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ. Но ΠΏΠ΅Ρ€Π²ΡƒΡŽ придётся ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ. По Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ устроСно ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. А Ссли Π±Ρ‹ нСсколько Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ Ρ‡ΠΈΡ‚Π°Π»ΠΎ Π±Ρ‹ сразу нСсколько ΠΊΠ½ΠΈΠ³, Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ многопроцСссорныС систСмы.

Если Π½Π° одноядСрном процСссорС ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ€Π°Π·Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ мощности (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠΈΠΌΠΈ вычислСниями ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… с диска), Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ СдинствСнноС процСссорноС ядро ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ нСсколько Π΄Π΅Π». Или, скаТСм, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ происходит Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ сразу нСсколько сайтов. Если для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· страниц Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ β€” Ρ‚ΠΎΠ³Π΄Π° всё Π±ΡƒΠ΄Π΅Ρ‚ сдСлано Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ Ссли Π±Ρ‹ эти страницы Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈΡΡŒ Π±Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° страницы β€” Π½Π΅ такая ΡƒΠΆ ΠΈ слоТная Π·Π°Π΄Π°Ρ‡Π°, ΠΎΠ½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ рСсурсы систСмы ΠΏΠΎ максимуму, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ запуск Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ оказываСтся вСсьма эффСктивным Ρ…ΠΎΠ΄ΠΎΠΌ.

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² Python для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ асинхронного программирования использовались ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, основанныС Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…. ΠŸΠΎΡ‚ΠΎΠΌ, Π² Python 3.4, появился ΠΌΠΎΠ΄ΡƒΠ»ΡŒ asyncio (ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ async IO ), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ асинхронного программирования. Π’ Python 3.5 появилась конструкция async/await.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ асинхронной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π° Python, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΏΠ°Ρ€ΠΎΠΉ понятий. Π­Ρ‚ΠΎ β€” ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ (coroutine) ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ (task).

ΠšΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° β€” это асинхронная (async) функция. ΠšΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½Π½Ρ‹ΠΌ ΠΈΠ· ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Если ΠΏΡ€ΠΈ объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° являСтся асинхронной, Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова await :

Вакая конструкция ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтит await-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ приостановит своё Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π° Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. ПослС этого Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ появится ΠΈ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½.

Π—Π°Π΄Π°Ρ‡ΠΈ

Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π΅ событий. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сущности, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции async def β€” это ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ взят ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Python.

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ‚ΠΎ Π½Π° экран Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ тСкст, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ послСднСй строках ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° 2 сСкунды. Если ΠΆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½, Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ составит ΡƒΠΆΠ΅ 3 сСкунды.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π˜Ρ‚ΠΎΠ³ΠΈ

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

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Как Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ асинхронный Python-ΠΊΠΎΠ΄?

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

РСализация асинхронности Π² Python с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ asyncio

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ соврСмСнных языков программирования, которая позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π΅ доТидаясь ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ популярности Node.js.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для поиска ΠΏΠΎ сСти, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ тысячу соСдинСний. МоТно ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ соСдинСниС, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ, двигаясь ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Однако это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π΅Π΄ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ соСдинСниС β€” опСрация, которая Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя. И всС это врСмя ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ находятся Π² процСссС оТидания.

А Π²ΠΎΡ‚ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ прСдоставляСт способ открытия тысячи соСдинСний ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. По сути, появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ, оТидая ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. Π’Π°ΠΊ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° всС Π½Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ispolzovanii asinhronnosti. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-ispolzovanii asinhronnosti. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ispolzovanii asinhronnosti. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

На Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ синхронный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΉΠΌΠ΅Ρ‚ 45 сСкунд, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ использовании асинхронности врСмя выполнСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎ 20 сСкунд.

Π“Π΄Π΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ примСняСтся Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅?

ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ большС всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ‚Π°ΠΊΠΈΡ… сцСнариСв:

Π Π°Π·Π½ΠΈΡ†Π° Π² понятиях ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, concurrency, поточности ΠΈ асинхронности

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ β€” это Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π·Π° Ρ€Π°Π·. ΠœΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΡΡ‚ΡŒ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π·Π°Π΄Π°Ρ‡, Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… CPU.

Concurrency β€” Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ понятиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ описываСт нСсколько Π·Π°Π΄Π°Ρ‡, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ с ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

ΠŸΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” ΠΏΠΎΡ‚ΠΎΠΊ β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния. Один процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСзависимо. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для IO-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ β€” ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ, однопроцСссорный Π΄ΠΈΠ·Π°ΠΉΠ½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ создаСт Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС.

Π‘ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ асинхронного программирования

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ асинхронного программирования ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄ для наглядности.

Π‘ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π‘ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (coroutine) β€” это ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΈ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Python.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сопрограммы

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

Python 3.5; async/await

Π’ΠΈΡ…ΠΎ ΠΈ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ (с), Π²Ρ‹ΡˆΠ΅Π» Python вСрсии 3.5! И, бСзусловно, ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых интСрСсных Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ Ρ€Π΅Π»ΠΈΠ·Π° являСтся Π½ΠΎΠ²Ρ‹ΠΉ синтаксис опрСдСлСния сопрограмм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов async/await, Π΄Π°Π»Π΅Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ± этом.

ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½Ρ‹ΠΉ просмотр Β«PEP 0492 β€” Coroutines with async and await syntaxΒ» ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ оставил Ρƒ мСня вопрос Β«Π—Π°Ρ‡Π΅ΠΌ это Π½Π°Π΄ΠΎΒ». Π‘ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΈ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всС свСлось ΠΊ Π·Π°ΠΌΠ΅Π½Π΅ yield from Π½Π° await, Π° Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ сопрограмму Π½Π° async. Бюда ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС это сдСлано ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для использования с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ asyncio.

Но это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΌΠ° Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈ интСрСснСС.

coroutine

Π“Π»Π°Π²Π½ΠΎΠ΅, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сопрограмма Π² Python β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ native coroutine, Π° Π½Π΅ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, опрСдСляСмый ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ языка.

await

К соТалСнию, Π½Π΅ нашСл Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ PEP ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для Ρ‡Π΅Π³ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ это Π½ΠΎΠ²ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово. Рискну ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ сам: ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово await ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π½ΠΈΠΌ выраТСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сопрограммы Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ»ΠΈ Π½Π° основной ΠΏΠΎΡ‚ΠΎΠΊ выполнСния.
БоотвСтствСнно Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ послС await Ρ‚ΠΎΠΆΠ΅ Π½Π΅ простоС, это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ awaitable ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

awaitable object
async

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° использованиС асинхронных ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ контСкст ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ PEP достаточно, usecase Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ понятСн ΠΈ всС Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. НСпонятно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ β€” Π·Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСрсии магичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, вСдь ΠΎΠ½ΠΈ всС Ρ€Π°Π²Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с использованиСм `async def`. Π’ΠΈΠ΄ΠΈΠΌΠΎ, это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, связанноС с особСнностями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ объяснСния Π½Π΅ Π²ΠΈΠΆΡƒ.

Как это Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ?

Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΈΡ‡ΠΈ языка ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ быстро упираСтся Π² вопрос, ΠΊΠ°ΠΊ ΠΈ Π³Π΄Π΅ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. И Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅, Π½Π° ΠΌΠΎΠΉ взгляд, стоит ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π° практичСском ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Для мСня, Ссли Ρ‚Π΅ΠΌΠ° связана с сопрограммами, Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΎΠΉ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” это написаниС Ρ…Π΅Π»Π»ΠΎΡƒΠ²ΠΎΡ€Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ event-driven ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ такая: Β«Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sleep Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исполнСниС сопрограммы Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя».

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

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ этой ΠΈΠ΄Π΅ΠΈ: Β«async/await coroutine and event-drivenΒ», ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎ этой ссылкС. Оно Π΅Ρ‰Π΅ сыроС, Π½ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ продСмонстрированного ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Β«timeoutΒ», Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сопрограмм ΠΏΠΎ событиям Β«I/O readyΒ» ΠΈ Β«system sygnalΒ». Π’ качСствС Π΄Π΅ΠΌΠΎ, Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ асинхронного echo server.

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

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ интСрСсной ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² ΠΏΡ€Π΅Π΄Π΄Π²Π΅Ρ€ΠΈΠΈ старта Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ курса Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PythonΒ».

асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. image loader. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

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

АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это Π²ΠΈΠ΄ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ какая-Π»ΠΈΠ±ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ основного ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния прилоТСния. Когда Ρ€Π°Π±ΠΎΡ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΉ ошибкС. Π£ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ мноТСство прСимущСств, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ скорости ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°.

асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. qoapylyqgr8y086kp2peecymd0y. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-qoapylyqgr8y086kp2peecymd0y. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° qoapylyqgr8y086kp2peecymd0y. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

Π’ послСдниС нСсколько Π»Π΅Ρ‚ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»ΠΎ ΠΊ сСбС ΠΏΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΈ Π½Π° Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот Π²ΠΈΠ΄ программирования ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТнСС Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния, ΠΎΠ½ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивСн.

НапримСр, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ HTTP-запроса ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ выполнСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, которая ΠΆΠ΄Π΅Ρ‚ своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ асинхронных ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ Π² Python.

ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ – это ΠΎΠ΄Π½Π° ΠΈΠ· основных ΠΏΡ€ΠΈΡ‡ΠΈΠ½ популярности Π²Ρ‹Π±ΠΎΡ€Π° Node.js для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бэкСнда. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ количСство ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм, особСнно Π² прилоТСниях с тяТСлым Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ Π½Π° Π²Π΅Π±-сайтах, зависит ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСсурсов. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ всС, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, ΠΎΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ POST-запросов Π² REST-сСрвис. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ запрос Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих рСсурсов, ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π°. Π‘ асинхронным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ‹ позволяСтС своСму ΠΊΠΎΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠΎΠΊΠ° ΠΆΠ΄Π΅Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ рСсурсов.

Как Python умудряСтся Π΄Π΅Π»Π°Ρ‚ΡŒ нСсколько Π²Π΅Ρ‰Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?

асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. image loader. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python Ρ„ΠΎΡ‚ΠΎ. асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python становится всС Π±ΠΎΠ»Π΅Π΅ популярным. Для этих Ρ†Π΅Π»Π΅ΠΉ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Бамая популярная ΠΈΠ· Π½ΠΈΡ… β€” Asyncio, которая являСтся стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python 3.4. Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Python.

1. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ процСссы

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ способ – это использованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов. Из Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свой скрипт Π΄Π²Π°, Ρ‚Ρ€ΠΈ, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅, Π΄Π΅ΡΡΡ‚ΡŒ Ρ€Π°Π·, ΠΈ всС скрипты Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСзависимо ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма сама позаботится ΠΎ распрСдСлСнии рСсурсов процСссора ΠΌΠ΅ΠΆΠ΄Ρƒ всСми экзСмплярами. Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ multiprocessing, которая ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ нСсколько процСссов, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅.

2. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько Ρ€Π°Π±ΠΎΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ – это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. ΠŸΠΎΡ‚ΠΎΠΊ – это ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ выполнСния, которая ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° процСсс, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ Ρƒ всСх Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ доступ ΠΊ рСсурсам. Однако ΠΈΠ·-Π·Π° этого Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ слоТно. Аналогично, всС Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти процСссора сдСлаСт опСрационная систСма, Π½ΠΎ глобальная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° (GIL) ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Python Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π°ΠΆΠ΅ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’Π°ΠΊ GIL Π½Π° CPython ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½ΡƒΡŽ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ насильно ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ядрС, Π΄Π°ΠΆΠ΅ Ссли Ρƒ вас ΠΈΡ… Π΄Π²Π°, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΈΠ»ΠΈ большС.

3. ΠšΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ yield :

ΠšΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ – это ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ многозадачности, ΠΊΠΎΠ³Π΄Π° процСсс Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ( yield ) с ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ оТидания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ нСскольким прилоТСниям Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ нСбольшими измСнСниями Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ yield. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ производят Π΄Π°Π½Π½Ρ‹Π΅ для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Ρ‰Π΅ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

4. АсинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ способ – это асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ участвуСт опСрационная систСма. Π‘ΠΎ стороны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Ρƒ вас останСтся ΠΎΠ΄ΠΈΠ½ процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ всСго ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, Π½ΠΎ Π²Ρ‹ всС Π΅Ρ‰Π΅ смоТСтС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько Π·Π°Π΄Π°Ρ‡. Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ Ρ‚ΡƒΡ‚ фокус?

Asyncio – ΠΌΠΎΠ΄ΡƒΠ»ΡŒ асинхронного программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» прСдставлСн Π² Python 3.4. Он ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈ future для упрощСния написания асинхронного ΠΊΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, ΠΊΠ°ΠΊ синхронный ΠΊΠΎΠ΄, ΠΈΠ·-Π·Π° отсутствия callback-ΠΎΠ².

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ запускаСм 3 асинхронных таска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ-ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ запросы ΠΊ Reddit, ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ ΠΈ выводят содСрТимоС JSON. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ aiohttp – ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ http, которая Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ HTTP-запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ асинхронно.

ИспользованиС Redis и Redis Queue RQ

ИспользованиС asyncio ΠΈ aiohttp Π½Π΅ всСгда Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя, особСнно Ссли Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π±ΠΎΠ»Π΅Π΅ старыми вСрсиями Python. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ сСрвСрам. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RQ (Redis Queue). Π­Ρ‚ΠΎ обычная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python для добавлСния Ρ€Π°Π±ΠΎΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡ… Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Redis – Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ count_words_at_url с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Redis.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΡƒΡŽ выставку, Π³Π΄Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… ΡˆΠ°Ρ…ΠΌΠ°Ρ‚ΠΈΡΡ‚ΠΎΠ² сорСвнуСтся с большим количСством людСй. Π£ нас Π΅ΡΡ‚ΡŒ 24 ΠΈΠ³Ρ€Ρ‹ ΠΈ 24 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‹Π³Ρ€Π°Ρ‚ΡŒ, ΠΈ, Ссли ΡˆΠ°Ρ…ΠΌΠ°Ρ‚ΠΈΡΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ синхронно, это Π·Π°ΠΉΠΌΠ΅Ρ‚ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 12 часов (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ срСдняя ΠΈΠ³Ρ€Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 30 Ρ…ΠΎΠ΄ΠΎΠ², ΡˆΠ°Ρ…ΠΌΠ°Ρ‚ΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΡ‹Π²Π°Π΅Ρ‚ Ρ…ΠΎΠ΄ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 5 сСкунд, Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ – ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 55 сСкунд.) Однако Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚ΠΈΡΡ‚ смоТСт Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΠ΄ ΠΈ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡƒ врСмя Π½Π° Ρ€Π°Π·Π΄ΡƒΠΌΡŒΡ, Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ пСрСходя ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡƒ ΠΈ дСля Ρ…ΠΎΠ΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΠ΄ Π²ΠΎ всСх 24 ΠΈΠ³Ρ€Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π° 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, ΠΈ Π²Ρ‹ΠΈΠ³Ρ€Π°Π½Ρ‹ ΠΎΠ½ΠΈ всС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ всСго Π·Π° ΠΎΠ΄ΠΈΠ½ час.

Π­Ρ‚ΠΎ ΠΈ подразумСваСтся, ΠΊΠΎΠ³Π΄Π° говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ускоряСт Ρ€Π°Π±ΠΎΡ‚Ρƒ. О Ρ‚Π°ΠΊΠΎΠΉ быстротС ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚ΠΈΡΡ‚ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ быстрСС, просто врСмя Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, ΠΈ ΠΎΠ½ΠΎ Π½Π΅ тратится Π²ΠΏΡƒΡΡ‚ΡƒΡŽ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅. Π’Π°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

По этой Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚ΠΈΡΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ процСссором, Π° основная идСя Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ процСссор простаивал ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π Π΅Ρ‡ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ Π½Π΅Π³ΠΎ всСгда Π±Ρ‹Π»ΠΎ занятиС.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ опрСдСляСтся ΠΊΠ°ΠΊ ΡΡ‚ΠΈΠ»ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ процСссор Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ оТидания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’ Python Π΅ΡΡ‚ΡŒ нСсколько способов достиТСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… вашим трСбованиям, ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΊΠΎΠ΄Π°, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ использования, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ любой ΠΈΠ· Π½ΠΈΡ….

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

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

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