asyncio ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠ΄
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΠΈ Π² Python Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ asyncio
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ β ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½ΡΡ ΠΏΡΠΈΡΠΈΠ½ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ Node.js.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ΅ΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΡΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ, Π΄Π²ΠΈΠ³Π°ΡΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΡ Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΅Π΄Ρ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ. Π Π²ΡΠ΅ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
Π Π²ΠΎΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠΊΡΡΡΠΈΡ ΡΡΡΡΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΠΎ ΡΡΡΠΈ, ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ, ΠΎΠΆΠΈΠ΄Π°Ρ ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. Π’Π°ΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²ΡΠ΅ Π½Π΅ Π²Π΅ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ° Π³ΡΠ°ΡΠΈΠΊΠ΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π·Π°ΠΉΠΌΠ΅Ρ 45 ΡΠ΅ΠΊΡΠ½Π΄, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΠΈ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π΄ΠΎ 20 ΡΠ΅ΠΊΡΠ½Π΄.
ΠΠ΄Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅?
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π²:
Π Π°Π·Π½ΠΈΡΠ° Π² ΠΏΠΎΠ½ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, concurrency, ΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΠΈ
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ β ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π° ΡΠ°Π·. ΠΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΡΡΡ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π·Π°Π΄Π°Ρ, Π½Π°Π³ΡΡΠΆΠ°ΡΡΠΈΡ CPU.
Concurrency β Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΠΈΠ΅ΠΌ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΠΎΡΠΎΡΠ½ΠΎΡΡΡ β ΠΏΠΎΡΠΎΠΊ β ΡΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ. ΠΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ IO-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ β ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ, ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
Π‘ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π Π°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ. Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ.
Π‘ΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π‘ΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (coroutine) β ΡΡΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ Python.
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Python: ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ²:
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΡΠ³Π»ΡΠ±ΠΈΠΌΡΡ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ, Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ², ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΈΜ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΈΜ:
Π βΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ. Π Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°. ΠΠ΄Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΠΏΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ Π½ΠΎΠ²ΠΎΠΈΜ Π·Π°Π΄Π°ΡΠ΅. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ βΠ½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡ (Π½Π΅ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ ΠΆΠ΄Π°ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ Π² ΡΡΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π°Π³Π΅Π½ΡΡΡΠ²ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈΜ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΈΜ ΠΎΡΠΏΡΡΠΊ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΈΡΡΠΌΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ»Π΅ΡΠ΅ΡΡ. Π ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡΠ΅ Π² ΡΡΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π°Π³Π΅Π½ΡΡΡΠ²ΠΎ, ΠΈ Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΏΠΎΠΏΡΠΎΡΡΡ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ, ΡΠΎ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π²Π°ΠΌ Π½Π΅ ΠΎΡΠ²Π΅ΡΡΡ. ΠΠ°ΡΠ΅ΠΌ Π²Ρ Π½Π°ΡΠ½Π΅ΜΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΈΡΡΠΌΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ΄Π½Π° Π·Π° ΠΎΠ΄Π½ΠΎΠΈΜ. [ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°] ΠΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΌΠ½Ρ, ΡΠΎ ΠΏΠΎΠΊΠ° Π²Π°Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ [βΠΏΠΎΠ²ΠΈΡΠ΅ΡΡ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅, ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°] Π²Ρ Π½Π°ΡΠ½Π΅ΜΡΠ΅ ΠΏΠΈΡΠ°ΡΡ e-mail ΠΈ ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°ΠΌΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°Π³ΠΎΠ²ΠΎΡΡΡ Π²Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΈΡΡΠΌΠΎ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ Π΄ΡΡΠ³Π° ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡΡ Π² Π°Π³Π΅Π½ΡΡΡΠ²ΠΎ, Π° ΡΠ°ΠΌΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΈΡΡΠΌΠΎ. ΠΡΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ, Π·Π°Π΄Π°ΡΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ:
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΈΜ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π»ΠΈΡΡ ΡΠΎ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΠΈΡΡΠΌΠ°, ΡΠΎ Π² ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ΅ Ρ ΡΡΡ. Π°Π³Π΅Π½ΡΡΡΠ²ΠΎΠΌ. ΠΡΠΎ βΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡΡ Π΄ΡΡΠ³Π°, Π° ΡΠ°ΠΌΠΈ ΠΏΠΈΡΠ°Π»ΠΈ ΠΏΠΈΡΡΠΌΠΎ, ΡΠΎ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ βΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ.β
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΏΠΎ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΌΠΎΠΈΜ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² CPU ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠ΄ΡΠΎ, ΡΠΎ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΈΜ. Π’ΠΎΠ³Π΄Π° ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ, Π½ΠΎ Π½Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. ΠΠΎ ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Ρ [ΠΊΠ°ΠΊ Π΄ΡΡΠ³ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΈΜ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠΎΡΡΠΌ ΡΠ΄ΡΠΎΠΌ, ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°] ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΜ (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π΅Ρ) ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΠΎΡΠΎΠΊΠΈ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ
Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΆΠ΅ ΠΎΡΠ΅Π½Ρ Π΄Π°Π²Π½ΠΎ. ΠΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎ. ΠΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Global Interpreter Lock (GIL) ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. Π ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ multiprocessing ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. Π Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΡ worker Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Π Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ :
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ 5 ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΡ ΡΡΠ°ΡΡΠ° (Ρ.Π΅. ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ worker) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ ΠΆΠ΄ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ print. ΠΡΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Thread. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ, ΡΠΎ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ (ΠΠΠ ΡΡΠΈΠ»Ρ).
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ , Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΡΠ»ΠΊΠΎΠΉ Π½ΠΈΠΆΠ΅:
GIL Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ CPython ΠΏΡΠΎΡΠ΅ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π°ΠΈΠ»ΡΡΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ C(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ). GIL β ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π² ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π·Π° ΡΠ°Π·. Π’.Π΅. ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π΅ Python Π΅Π΄ΠΈΠ½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. GIL ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ.
ΠΡΠ°ΡΠΊΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ GIL:
ΠΡΠΈ ΡΠ΅ΡΡΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ³Π»ΡΠ±ΠΈΡΡΡΡ Π² GIL:
Π§ΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π² Python Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ multiprocessing, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ API, ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ threading ΡΠ°Π½ΡΡΠ΅.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΉΠ΄Π΅ΠΌ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΡΠΎΡΠ΅ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΠΎΡΠΎΠΊΠ°.
Π§ΡΠΎ ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ? Π― ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π» ΠΌΠΎΠ΄ΡΠ»Ρ multiprocessing Π²ΠΌΠ΅ΡΡΠΎ threading. Π Π·Π°ΡΠ΅ΠΌ, Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΎΡ ΠΈ Π²ΡΡ! Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ΄ΡΠ°Ρ CPU (Π΅ΡΠ»ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Ρ).
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° Pool ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²:
ΠΠ΄Π΅ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ f ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ, ΠΌΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ . ΠΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ f(1), Π΄ΡΡΠ³ΠΎΠΉ-f(2), Π° Π΄ΡΡΠ³ΠΎΠΉ-f (3). ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ½ΠΎΠ²Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°Π·Π±ΠΈΡΡ ΡΡΠΆΠ΅Π»ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠ°ΡΡΠ΅ΡΠ°.
ΠΠΎΠ΄ΡΠ»Ρ concurrent.futures Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ. ΠΠΎΠΈ Π»ΡΠ±ΠΈΠΌΡΠΈΠΊΠΈ ThreadPoolExecutor ΠΈ ProcessPoolExecutor. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠ» ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π½Π°ΡΠΈ Π·Π°Π΄Π°ΡΠΈ Π² ΠΏΡΠ», ΠΈ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠΈ Π² Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ / ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Future, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ.
Π Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ThreadPoolExecutor:
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΠ°ΡΡΡ ΠΎ concurrent.futures masnun.com/2016/03/29/python-a-quick-introduction-to-the-concurrent-futures-module.html. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡΠΈ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΌ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
Asyncio β ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
Π£ Π²Π°Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡΡ Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»ΡΠ΄Π΅ΠΉ Π² ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅ Python β ΡΡΠΎ asyncio ΠΏΡΠΈΠ½ΠΎΡΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ? ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ΅Π½ Π±ΡΠ» Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°? Π Π°Π·Π²Π΅ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²? ΠΠ°Π²Π°ΠΉ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ!
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ asyncio?
ΠΡΠΎΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΠ΅ [Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°] Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ Π²Π΅ΡΠ΅ΠΉ β ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ Π΄ΠΈΡΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ Π»Π°Π³ΠΈ Π΄Π΅Π»Π°ΡΡ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ ΡΠ°ΡΡΠΎ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. 3 ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠ°Π·ΠΎΠ²Π΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ β T1, T2 ΠΈ T3. Π’ΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°ΡΠ°Π»ΠΈ ΡΠ²ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. T3 Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΡΠΌ. T2 ΠΈ T1 Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π° T1, Π½ΠΎ ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΆΠ΄Π΅Ρ. Π₯ΠΎΡΠΎΡΠΎ, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² T2, Π° ΡΠΎΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΆΠ΄Π΅Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² T3, ΠΊΠΎΡΠΎΡΡΠΉ Π³ΠΎΡΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ΄. ΠΡ Π²ΠΈΠ΄ΠΈΡΠ΅ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
T3 Π±ΡΠ» Π³ΠΎΡΠΎΠ², Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ T2 ΠΈ T1 β ΡΡΠΎ ΠΏΠΎΠ½Π΅ΡΠ»ΠΎ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΡΡ Π½Π° T3, Π²Π΅ΡΠ½ΠΎ?
Asyncio ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π°ΡΡΠ΄Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΡΡΡΡΠΌΠΈ Π²Π΅ΡΠ°ΠΌΠΈ. Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (event loop) ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΠΎΡΠΎΠ²Ρ ΠΈ ΠΆΠ΄ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° [ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΡΠΈΠ±ΡΡΠΈΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ°ΡΡΡΠ»ΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°].
ΠΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°. ΠΡΡΡ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. Π Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΠ²ΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΊΠ»Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΠΏΡΠΎΡΠΈΠΌ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ Π΄Π»Ρ Π½Π°Ρ. Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Future, ΡΠ»ΠΎΠ²Π½ΠΎ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ. ΠΡ Π΄Π΅ΡΠΆΠΈΠΌΡΡ Π·Π° ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΠΎΠ½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΌ ΠΎΡΠ΅Π½Ρ Π½Π΅ ΡΠ΅ΡΠΏΠΈΡΡΡ), ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ [Ρ.Π΅. ΠΌΡ ΠΏΠΎΡΠ»Π°Π»ΠΈ Π·Π°ΠΏΡΠΎΡ, Π½Π°ΠΌ ΡΡΠ°Π·Ρ Π΄Π°Π»ΠΈ Π±ΠΈΠ»Π΅Ρ ΠΈ ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡΠΈΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΌΡ Π±Π΅ΡΠ΅ΠΌ Π±ΠΈΠ»Π΅Ρ ΠΈ ΠΏΠΎ Π½Π΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°].
Asyncio ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΈ ΠΊΠΎΡΡΡΠΈΠ½Ρ Π΄Π»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ. ΠΡΠΎΡΠΈΡΠ°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π΄Π΅ΡΡ:
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ½ΡΠΌ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ async/await ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Python 3.5 ΠΈ Π²ΡΡΠ΅. ΠΡΠΎΠΉΠ΄ΡΠΌΡΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρ:
ΠΠ΅Π»Π°Π΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΌΡ ΠΏΡΠΎΡΠ»ΠΈΡΡ ΠΏΠΎ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΡΠΎΡΠΌΠ°ΠΌ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠΎ ΠΎΡΡΠ°ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡ β ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ? ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ· ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠΏΡΡΠ° Ρ ΡΠΊΠ»ΠΎΠ½Π΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΠΌΡ ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ΄Ρ:
ΠΠ±Π·ΠΎΡ Async IO Π² Python 3.7
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΎΠ±Π·ΠΎΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ: Guest Contributor Overview of Async IO in Python 3.7
ΠΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΌΠΎΠ΄ΡΠ»Ρ asyncio
ΠΠΎΠ΄ΡΠ»Ρ Python 3 asyncio ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π² Python. ΠΠ½ Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Python 3.4, ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ΅Π»ΠΈΠ·ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°Π·Π²ΠΈΠ²Π°Π»ΡΡ.
ΠΡΠΎ ΡΡΠ°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠΈΠΉ ΠΎΠ±Π·ΠΎΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Python 3.7.
ΠΠ»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠΈΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡΡ, β ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΎΠ½Π° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΠΎΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°, Π²ΡΠ·Π²Π°Π½Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ, Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°. ΠΠ΄Π½Π°ΠΊΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° 1010 ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡΡ.
ΠΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΡΡΡ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ
Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π΄Π΅Π»ΡΡΡΡ Π½Π° ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (multiprocessing), ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ (threading) ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ.
ΠΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° β ΡΡΠΎ ΡΠΎΡΠΌΠ° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΌΠΊΠ°Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ ΡΠ΄ΡΠ°Ρ . ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΡΠ΄ΡΠΎΠΌ, Π½Π΅ΡΠ΅Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π²ΠΊΠ»ΡΡΠ°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΡΡΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ (heap).
Python ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ multiprocessing.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python 3, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ΅ΡΡΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ. ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΈ ΠΏΠΈΠΊΠΎΠ²ΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
ΠΠΎΡΠΎΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΡΡΠΈ, Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌΠΈ.
ΠΠΎΡΠΎΠΊΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΡΡΡΡ, ΠΈ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΠΎΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ΄ΡΠ° ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄Π½Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ (heap).
ΠΠΎΡΠΎΠΊΠΈ Python ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌΠΈ (concurrent) β Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΌΠΊΠ°Ρ . ΠΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Ρ β Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΄ΡΠ°Ρ .
ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Python ΡΠ²Π»ΡΡΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ (memory safety) ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ (race conditions). ΠΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π·Π°ΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ± ΡΡΠΎΠΌ Π½Π΅ ΡΠ·Π½Π°ΡΡ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ.
ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ CPython ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (GIL). GIL β ΡΡΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ Python. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ.
ΠΠΎΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ: multiprocessing.Process Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° threading.Thread. ΠΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π²ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° (Π½Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ), ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ, Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ Π²ΡΡΠ΅ΡΠ½Π΅Π½ΠΈΠ΅, ΠΎΠ±Π»Π΅Π³ΡΠ°Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π³ΠΎΠ½ΠΊΠΈ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠ΄ΡΠ»Ρ Python 3.7 asyncio
Π Python 3.7 Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ asyncio.
High-Level ΠΏΡΠΎΡΠΈΠ² Low-Level asyncio API
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Asyncio ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ Π½Π° API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ) ΠΈ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ»ΠΈ ΡΡΠ΅Π΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ asyncio).
ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° asyncio ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ API. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π²Π°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎΠ³Π°ΡΡ API Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.
Π‘ ΡΡΠ΅ΡΠΎΠΌ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ API ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ.
ΠΠΎΡΡΡΠΈΠ½Ρ (Coroutines)
Π ΠΎΠ±ΡΠ΅ΠΌ, coroutine (ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ cooperative subroutine) β ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Π΄ΠΎΠ±ΡΠΎΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ: ΠΎΠ½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΡΡΠΏΠ°Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠ΅ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, Π° Π½Π΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠ΅ΡΠ½ΡΠ΅ΡΡΡ ΡΠ΄ΡΠΎΠΌ. Π’Π΅ΡΠΌΠΈΠ½ Β«coroutineΒ» Π±ΡΠ» ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½ Π² 1958 Π³ΠΎΠ΄Ρ ΠΠ΅Π»Π²ΠΈΠ½ΠΎΠΌ ΠΠΎΠ½Π²Π΅Π΅ΠΌ (Π² Conwayβs Law), ΡΡΠΎΠ±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠ΅ΡΡΡΡΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
Π asyncio ΡΡΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ awaiting.
Awaitables, Async, ΠΈ Await
ΠΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ awaitable.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ await ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (coroutine) ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ awaitable.
Π Python 3.7 Π΅ΡΡΡ ΡΡΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (awaitable) β coroutine, task ΠΈ future.
Coroutine Π² asyncio β ΡΡΠΎ Π»ΡΠ±Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Python, Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ°Π·Π°Π½ ΠΏΡΠ΅ΡΠΈΠΊΡ async.
task Π² asyncio β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ coroutine, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π΅Π΅ ΡΡΠ°ΡΡΡΠ°. task ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ asyncio.create_task() ΠΈΠ»ΠΈ asyncio.gather().
future Π² asyncio β ΡΡΠΎ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΡΠΈΡΠ°Π½Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ Π³ΠΎΡΠΎΠ²Ρ.
ΠΠ±ΡΡΠ½ΠΎ Π² Python 3.7 Π²Π°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ future.
Event Loops
Π asyncio event loop (ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ) ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². event loop ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ awaitables. ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° asyncio ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ event loop. ΠΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ event loop, Π½ΠΎ Π² Python 3.7 Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ event loop.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΊΠ»Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° asyncio.get_running_loop().
Sleeping
ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° asyncio.sleep(delay) Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ. ΠΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Event Loop
ΠΠ°Π½ΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ asyncio ΡΠ²Π»ΡΠ΅ΡΡΡ asyncio.run(main()), Π³Π΄Π΅ main () β ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° (coroutine) Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΡΠ·ΠΎΠ² asyncio.run() Π½Π΅ΡΠ²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ event loop (ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ). Π£ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΊΠ»Π° Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ loop.time(), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΠ°ΡΠ°ΠΌΠΈ ΡΠΈΠΊΠ»Π°.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ asyncio.run() Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Anaconda ΠΈΠ»ΠΈ Jupyter, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΡΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° python.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°, Π±Π»ΠΎΠΊΠΈΡΡΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
ΠΠ°Π΄Π°ΡΠΈ (Task)
ΠΠ°Π΄Π°ΡΠ° β ΡΡΠΎ awaitable (ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ) ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (coroutine). Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΡΡΠ°Π·Ρ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·Π²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π²Π΅ΡΠ½Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°Π΄Π°ΡΠΈ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠΈΠΊΠ»Ρ: Β«ΠΠ΄ΠΈ ΠΈ Π·Π°ΠΏΡΡΡΠΈ ΡΡΡ coroutine (ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ), ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΌΠΎΠΆΠ΅ΡΡΒ».
ΠΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ (await) Π·Π°Π΄Π°ΡΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ coroutine Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ° ΡΡΠ° Π·Π°Π΄Π°ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
ΠΠ°Π΄Π°ΡΠΈ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ (coroutine). Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΈΡΡ ΠΎΡΠΌΠ΅Π½Ρ Π·Π°Π΄Π°ΡΠΈ, Π²ΡΠ·Π²Π°Π² ΠΌΠ΅ΡΠΎΠ΄ .cancel(). ΠΠ°Π΄Π°ΡΠ° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΎΡΠΌΠ΅Π½Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΡ ΠΎΠ΄Π΅ ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΡΠΌΠ΅Π½Π° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ: Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΡΠΈΠΊΠ»Π°, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΌΠ΅Π½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ.
Π‘Π±ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Awaitable
ΠΠ±ΡΠ΅ΠΊΡΡ awaitable ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ Π² Π³ΡΡΠΏΠΏΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ asyncio.gather(awaitables).
Asyncio.gather() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ awaitable, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ awaitable Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π‘Π±ΠΎΡ β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π΄Π°Ρ. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
ΠΡΠΈΠΌΠ΅Ρ: Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π²Π΅Π±-Π·Π°ΠΏΡΠΎΡΡ Ρ aiohttp
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ API. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Π°Ρ Π΄Π»Ρ Python 3.7, ΠΏΡΠΈΠΌΠ΅ΡΠ° Asyncio Π‘ΠΊΠΎΡΡΠ° Π ΠΎΠ±ΠΈΠ½ΡΠΎΠ½Π° (Scott Robinsonβs nifty asyncio). ΠΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ aiohttp Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° Π²Π΅ΡΡ Π½ΠΈΡ ΠΏΠΎΡΡΠΎΠ² Π² Reddit ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ aiohttp, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ Π½ΠΈΠΆΠ΅. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ pip:
ΠΡΡΠ³ΠΎΠ΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ API
ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΎΠ±Π·ΠΎΡ Π΄Π°ΡΡ Π²Π°ΠΌ ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ asyncio. ΠΡΡΠ³ΠΈΠ΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ asyncio, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π΄Π΅ΡΡ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ:
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΠΈ, Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ asyncio, ΠΏΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΎΠ±Π·ΠΎΡ Π΄Π°ΡΡ Π²Π°ΠΌ ΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ asyncio.
Π§ΡΠΎ Π²Π½ΡΡΡΠΈ asyncio
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΡΠΎ ΠΌΠ½ΠΎΠΉ Π² ΠΌΠ΅ΡΡ ΡΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ Π² Π½Π΅Π΄ΡΠ° asyncio, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠΡ ΠΎΡΠ΅Π΄Π»Π°Π΅ΠΌ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠΌΡΠΈΠΌΡΡ ΠΏΠΎ ΡΠΈΠΊΠ»Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΊΠ²ΠΎΠ·Ρ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ ΠΏΡΡΠΌΠΎ Π² ΠΊΠΎΡΡΡΠΈΠ½Ρ. ΠΡΠ»ΠΈ Π½Π° Π²Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅ ΠΏΠΈΡΠΎΠ½Π° Π΅ΡΠ΅ Π½Π΅Ρ ΡΡΠΈΡ Π΄ΠΎΡΡΠΎΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ, Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
ΠΠ»Ρ Π·Π°ΡΡΠ°Π²ΠΊΠΈ β ΠΊΡΠ°ΡΠΊΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ° ΠΎ ΡΠ°ΡΠΊΠΈΠ½ΡΠ²ΡΠ΅ΠΉΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ ΠΌΠ΅ΡΡΠ½ΠΎΡΡΠΈ
asyncio β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠΎΡΠΎΡΠ°Ρ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ pep3153, Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π°, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². pep3156 ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΈΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π²ΡΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Twisted, Tornado, Gevent). ΠΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ, ΡΡΠΈ ΡΠ΅Π»ΠΈ Π±ΡΠ»ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ β ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ asyncio: aiohttp, Π² Tornado AsyncioMainLoop ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΊΠ»ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π²Π΅ΡΡΠΈΠΈ 5.0, Π² Twisted asyncioreactor Π΄ΠΎΡΡΡΠΏΠ΅Π½ Ρ Π²Π΅ΡΡΠΈΠΈ 16.5.0, Π° Π΄Π»Ρ Gevent Π΅ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° aiogevent.
asyncio β ΡΡΠΎ Π³ΠΈΠ±ΡΠΈΠ΄Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°: ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½Π° ΠΊΠΎΠ»Π»Π±ΡΠΊΠ°Ρ ΠΈ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΉ, (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΏΠΈΡΠΎΠ½Π°) Π½Π° ΠΊΠΎΡΡΡΠΈΠ½Π°Ρ . Π Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π΅ Π»Π΅ΠΆΠ°Ρ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π² ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ :
ΠΠΎΠ΅Ρ Π°Π»ΠΈ!
Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ β ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΠΎ Π΄ΠΎΡΠΎΠ³Π°ΠΌ, ΠΏΡΠΎΠ»Π΅Π³Π°ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ, Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π² Π»ΡΠ±ΡΠ΅ Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. ΠΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅Π³ΠΎ ΡΡΠ΅Π·Π°Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΡΠ΅Π΄Π»Π°Π² Π½Π°Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΊΠΎΠ»Π»Π±ΡΠΊ, ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π² ΠΏΡΡΡ ΡΠ΅ΡΠ΅Π· call_soon, ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΡΠ°ΡΠΊΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ Π½Π° ΡΠΊΡΠ°Π½.
ΠΠΏΠΈΠ·ΠΎΠ΄ ΠΏΡΠΎ ΠΏΠ»ΠΎΡ ΠΈΠ΅ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ
Π‘ΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ ΡΡΠΎ ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π»ΠΎΡΠ°Π΄ΠΊΠΈ β Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ±ΡΠΎΡΡΡ Π²Π°Ρ ΠΏΠΎΡΡΠ΅Π΄ΠΈ Π΄ΠΎΡΠΎΠ³ΠΈ, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΈΡΠΎΠ½Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΏΠΎΠ½ΡΡΡ, Π³Π΄Π΅ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ. ΠΡΠ»ΠΈ Π½Π΅ Π²Π΅ΡΠΈΡΠ΅, ΠΏΠΎΠΊΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΎΡΠΎΠ³ΠΎΠΉ Π½Π° ΠΊΠΎΠ»Π»Π±ΡΠΊΠ΅ maybe_print, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠ΅ΠΌ ΠΊ ΡΠΈΠ½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΡΠ»ΡΡΠ°Π΅Π².
ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΡΡΠ΅ΠΉΡΠ±ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ maybe_print Π±ΡΠ»Π° Π·Π°ΠΏΡΡΠ΅Π½Π° ΡΠΈΠΊΠ»ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ, Π° Π½Π΅ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· starting_point, ΡΡΠ΅ΠΉΡΠ±ΡΠΊ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½ΡΠΌ, Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ run_until_complete. ΠΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΡΡΠ΅ΠΉΡΠ±ΡΠΊΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π³Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ starting_point, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡ ΠΎΡΠ»Π°Π΄ΠΊΡ, Π΅ΡΠ»ΠΈ starting_point Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ.
ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π½ΡΠΆΠ΅Π½ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΡΠ±ΡΠΊΠ°, Π½ΠΎ ΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π½ΡΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅ Π½Π΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π·Π°ΠΏΡΡΠΊΠ° starting_point, ΡΡΠ½ΠΊΡΠΈΡ main ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°:
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠΆΠ΅ Π½Π΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ main ΠΎΡΠΊΡΠΎΠ΅Ρ ΠΈ Π·Π°ΠΊΡΠΎΠ΅Ρ ΡΠ°ΠΉΠ» Π΅ΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°.
ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΡΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ°. ΠΠ»Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ° Π² asyncio ΠΏΡΠΈΡΠ»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡeΠ³ΠΎΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΊ ΡΠ΅ΡΠ°Π΅ΠΌΠΎΠΉ Π΅ΠΉ Π·Π°Π΄Π°ΡΠ΅. ΠΡΠΎΡ ΠΊΠΎΠ΄, ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ, ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ β ΠΎΠ½ΠΈ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Ρ.
ΠΠ· ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ Π²ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΌΠΈΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ
Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΡΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΌΠΈΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ Ρ Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ selectors. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΡΠΎ ΠΌΡ ΠΆΠ΄Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΏΡΠΎΡΠΈΡΡ, ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠΎΠΊΠ΅ΡΠ° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ½Π΅Ρ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ° ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ»ΠΊΡ Π² ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ΅, Π° ΡΠ΅Π»Π΅ΠΊΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ netcat, ΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±ΡΠΎΡΠΎΠ²Π΅ΡΡΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π²ΡΡ, ΡΡΠΎ Π² Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ.
Π Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°ΡΡΠΈ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ asyncio β Π³ΠΈΠ±ΡΠΈΠ΄Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΡΡΡΠΈΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΎΠ². ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π²Π΅ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ: Task ΠΈ Future. ΠΠ°Π»Π΅Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ΄ ΡΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ, Π° Π·Π°ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΡ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ.
Future
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° Future. ΠΠ½ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π² ΠΊΠΎΡΡΡΠΈΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ»Π»Π±ΡΠΊΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΠΊΠ»Π°ΡΡΠ° Future. ΠΠ½ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΡΡΡΠΈΠ½Ρ Π½Π° ΠΊΠΎΠ»Π»Π±ΡΡΠ½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ.
Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠΌΠ΅ΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Future
ΠΠ²ΠΈΠ½Π΅ΠΌΡΡ Π΄Π°Π»ΡΡΠ΅
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌ Π·Π° ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΡΡΡΠΈΠ½Π° main Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ:
ΠΠΎΡ ΡΠ°ΠΊΠΈΠΌ Π½Π΅Ρ ΠΈΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ asyncio Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΡΡΡΠΈΠ½Ρ.
ΠΡΠΎΠ³ΠΈ
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ asyncio Π±ΡΠ»ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π²ΡΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Twisted, Tornado, Gevent). ΠΠ· ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ Π²ΡΠ±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²: Π΅ΡΠ»ΠΈ Π±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΡΡΡΠΈΠ½Π°ΠΌ Π±ΡΠ»Π° Π±Ρ ΠΎΡΠ΄Π°Π½Π° Π³Π»Π°Π²Π½Π°Ρ ΡΠΎΠ»Ρ. ΠΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΠΊΠΎΠ»Π»Π±ΡΠΊΠ°Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΡΡΡΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ², Π½Π° Π³ΡΠ°Π½ΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈ ΠΊΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΎΠΏΠΈΡΠ°ΡΡΠΈΡ ΡΡ Π½Π° Π½Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ°.
Π’Π΅ΠΏΠ΅ΡΡ Π³Π»Π°Π²Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΡ ΡΡΠΎ Π·Π½Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π»ΠΈΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ API?
ΠΠΎΡ ΠΊΡΡΠΎΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° StreamWriter
ΠΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ asyncio.open_connection ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ async/await API ΠΏΠΎΠ²Π΅ΡΡ API Π½Π° ΠΊΠΎΠ»Π»Π±ΡΠΊΠ°Ρ . Π ΡΡΠΈ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠΎΡΡΠ°Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ write ΠΈ writelines ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅, ΠΎΠ½ΠΈ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΈΡΠ°ΡΡ Π² ΡΠΎΠΊΠ΅Ρ, Π° Π΅ΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΠΎ ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΠΈΠΉ Π±ΡΡΠ΅Ρ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ. ΠΠΎΡΡΡΠΈΠ½Π° drain Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ, ΠΏΠΎΠΊΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅ΡΠ΅ Π½Π΅ ΠΎΠΏΡΡΡΠΈΡΡΡ Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π·Π°Π±ΡΡΡ Π²ΡΠ·Π²Π°ΡΡ drain ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ write, ΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ Π±ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·ΡΠ°ΡΡΠΈΡΡ Π΄ΠΎ Π½Π΅ΠΏΡΠΈΠ»ΠΈΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ, ΡΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΠ°ΡΠ° Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ: Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»Π»Π±ΡΠΊ Π½Π° Π·Π°ΠΏΠΈΡΡ Β«ΡΠ»ΠΎΠΌΠ°Π΅ΡΡΡΒ», ΡΠΎ ΠΊΠΎΡΡΡΠΈΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΡΡΠΎΡ API Π½ΠΈΠΊΠ°ΠΊ ΠΎΠ± ΡΡΠΎΠΌ Π½Π΅ ΡΠ·Π½Π°Π΅Ρ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠΎΡΠΎΠΉ: Π΅ΡΠ»ΠΈ ΠΊΠΎΡΡΡΠΈΠ½Π° Β«ΡΠ»ΠΎΠΌΠ°Π΅ΡΡΡΒ», ΡΠΎ ΠΊΠΎΠ»Π»Π±ΡΠΊ Π½Π° Π·Π°ΠΏΠΈΡΡ Π½ΠΈΠΊΠ°ΠΊ ΠΎΠ± ΡΡΠΎΠΌ Π½Π΅ ΡΠ·Π½Π°Π΅Ρ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΠΏΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΡΡΡΠΈΠ½Ρ, Π±ΡΠ΄ΡΡΠ΅ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ Π½Π°ΠΏΠΎΠΌΠ½ΡΡ ΠΎ ΡΠ΅Π±Π΅.
Π ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π° Antida software.