ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° 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 ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ.
Π‘ΠΏΠΎΡΠΎΠ± ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·Π°ΡΠΈΠΈ.
Π Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΌΠ°ΡΡΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ. ΠΠ· ΠΊΠ°ΠΆΠ΄ΡΡ
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΡΡΠΎΠΊ ΠΌΠ°ΡΡΠΈΡΡ ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΈΡ
Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π΄Π°Π½ΠΈΠΉ (ΡΠΌ. ΡΠΈΡ. 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.
ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈ Π΄Π²ΡΡ
ΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠ΅ΡΠ° Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
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 Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΄ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° ΡΡΠΈΡΡΠ²Π°ΡΡ. ΠΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² Python Π½ΡΠΆΠ½Π°, Π° ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠ°Π΅Ρ.
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ»ΡΡΠΈΡ ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ . Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΡΠΎΠΊ ΠΈ ΡΠ΅ΠΌ ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΌΡ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ Π² ΡΡΠ°ΡΡΠ΅ Β«ΠΠ½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°: ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³ mutex’ΠΎΠΌΒ». Π’ΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π° Java, Π½ΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π²Π΅ΡΠ½Ρ ΠΈ Π΄Π»Ρ Python. Π‘ΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (mutex), ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΠΎΠ±ΡΡΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π°ΠΊΡΠ΅Π½Ρ Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ Python, Π΅Π³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°Ρ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ , ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΡ.
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² Python Π±Π΅Π· Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ:
ΠΠΎΠΊΠ° Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠ½ΠΊΡ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ Π² Python
ΠΠ΅ΡΠΎΠ΄ 1 β Β«ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉΒ»
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ threading ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Thread. Π Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΈΡΠ΅ΠΌ:
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ Thread() β Ρ Π½Π΅ΠΉ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ:
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ target β ΡΡΠΎ Β«ΡΠ΅Π»Π΅Π²Π°ΡΒ» ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅. Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ ΡΡΠ΄ΡΠ±Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»ΠΈΠΌΡΠΌ, Π° ΠΊΡΠΎ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ args=(x,y). ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ Β«ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π·Π°ΠΏΠΈΡΡ Π²ΠΈΠ΄Π° kwargs=<βpropβ:120>.
Π Π°Π΄ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΈΠΌΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ name=Β«ΠΠΌΡ ΠΏΠΎΡΠΎΠΊΠ°Β». ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ name Ρ ΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null. Π Π΅ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° group, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β None.
ΠΠ° Π΄Π΅Π»ΠΎ! ΠΡΡΡΡ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π² ΡΠ²ΠΎΠΉ ΡΠ°ΠΉΠ» Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π·Π°Π΄ΡΠΌΠ°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ ΠΈ ΠΈΠΌΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ.
Π§ΡΠΎ start() Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π²Ρ ΡΠΆΠ΅ Π΄ΠΎΠ³Π°Π΄Π°Π»ΠΈΡΡ. ΠΠ΅ΡΠΎΠ΄ join() ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠ΅Π΄Ρ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ ΠΎΡΠΊΡΡΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«Π£Ρ ΠΎΠ΄Ρ, Π³Π°ΡΠΈΡΠ΅ ΡΠ²Π΅ΡΒ». ΠΠ°Π²Π΅ΡΡΠ°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ Π² ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈ ΡΠ²Π½ΠΎ β Π½Π°Π΄ΡΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΡΠ½Π°ΡΡΠΆΠΈ ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΊΠΎΠ³Π΄Π°. ΠΠ΅Π½ΡΡΠ΅ ΡΠΈΡΠΊ, ΡΡΠΎ Π²ΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠ°ΠΊΡΠΎΡΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ.
ΠΠ΅ΡΠΎΠ΄ 2 β Β«ΠΊΠ»Π°ΡΡΠΎΠ²ΡΠΉΒ»
ΠΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΈΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΡΡ ΠΎΡ Thread ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ threading. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ run() ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π’Ρ ΠΆΠ΅ ΠΏΠ΅ΡΡΡΡΠΊΡ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈ Π² Java.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
Π§ΡΠΎΠ±Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π½ΡΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ΅Π±Ρ Π²Π΅Π΄ΡΡ. Π Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π² 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! ΠΠΎΡΠΎΠ³Ρ Π²Π°ΠΌ ΠΏΡΠ΅Π³ΡΠ°Π΄ΠΈΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΡΠ»ΡΠ·β¦ ΠΠ°ΠΆΠ΅ ΡΠ°ΠΊ β Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΠ· (Global Interpreter Lock, ΠΎΠ½ ΠΆΠ΅ GIL), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ Π½Π° Π²ΡΠ΅Ρ mutex, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ Π½ΠΈ Π² C, Π½ΠΈ Π² Java.
ΠΠ°Π΄Π°ΡΠ° ΡΠ»ΡΠ·Π° β ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ, ΡΡΠΎΠ± Π½Π΅ Π»Π΅ΡΠ°Π»ΠΈ Π½Π°ΠΏΠ΅ΡΠ΅Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΡΡΠΈΡΡΠ΅ΠΉΡΠ΅ΡΡ, ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ ΡΠ³ΡΠΎΠ·Ρ ΡΠ°Π±ΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
ΠΠ΅Π· ΡΠ»ΡΠ·Π° ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΡΠ΅Π·Π°Π»ΠΈ Π±Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΌΡΡΠΈ, Π½ΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π²ΡΡ. ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π·Π°ΡΡΠΏΠ°ΡΡ Π·Π° ΡΡΠ»ΡΠΌ! ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, Π²ΠΎΠ²ΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ²ΡΠ΅ΠΌΡ β ΠΏΡΠΎΡΡΠΎ ΡΡΡΠΏΠ»ΡΠ΅Ρ ΠΈΡ Π² Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³Π° ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ.
ΠΠ΅Π·ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΡΠΎΡΠΎΠ½ΠΎΠΊ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΈΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΡΡΠΏΠ°Π», ΡΠΈΡΠΊΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π°Π»ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΡΠΏΠΈΠΊΠΎΠ²ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ (deadlock). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ½ΠΎΠΌ ΠΠΎΡΠΎΠΊ 1 Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ, Π° ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΡ Π½Π΅ Π½Π°ΡΡΠ» Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Ρ.ΠΊ. ΠΈΡ ΡΠ΄Π°Π»ΠΈΠ» ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°Π» ΠΠΎΡΠΎΠΊ 2.
Π§ΡΠΎΠ±Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ, GIL Π² ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π· Π² 5 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ Π΄Π»Ρ Python 3.2+) ΠΊΠΎΠΌΠ°Π½Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ: Β«Π‘ΠΠΠΠΠ’Π¬!Β» β ΡΠΎΡ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ΅Π·ΠΆΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΆΠ΅Π»Π°ΡΡΠ΅ΠΌΡ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΆΠ΅Π»Π°ΡΡΠ΅Π³ΠΎ Π½Π΅Ρ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ»ΡΠ·Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠΎ, Π° ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ. ΠΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ β ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡ ΠΎΠ΄ΠΈΡ Π½Π° ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²ΠΊΡ Β«Π΄ΠΎΡΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡΒ». Π Π·Π½Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π³ΡΠ°ΡΠΈΠΊΠΈ, ΡΠ°ΡΡΠ΅Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌ Π΄Π°Π½Π½ΡΡ c GIL ΠΈΠ΄ΡΡ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄ΠΎΠ»Π³ΠΎ.
Π ΡΡΠ°ΡΡΠ΅ Β«Understanding Python GILΒ»ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Gaglers Inc. ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎ ΡΡΠ°ΠΆΠ΅ΠΌ Chetan Giridhar ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠΎΠ΄ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° 100 000 ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ»ΠΎ Ρ ΠΌΠ°ΡΠΈΠ½Ρ Π½Π° ΡΡΡ Π·Π°Π΄Π°ΡΡ. ΠΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΄ΡΠ΅ ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π°Π½ΡΠ»ΠΈ 3,4 ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π’ΠΎΠ³Π΄Π° Π§Π΅ΡΠ°Π½ ΡΠΎΠ·Π΄Π°Π» ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ» Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. Π Π°ΡΡΠ΅Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° Π½Π° Π΄Π²ΡΡ ΡΠ΄ΡΠ°Ρ Π΄Π»ΠΈΠ»ΡΡ 6,2 ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π Π²Π΅Π΄Ρ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΠ»Π° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ! ΠΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠ΅Π½Π° Π·Π°Π΄Π°ΡΠ°, Π΅ΡΠ»ΠΈ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ thread2. Π― ΠΏΠΎΠ»ΡΡΠΈΠ»Π° Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π½ΠΎ Π²Π΄Π²ΠΎΠ΅.
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΠ· β Π½Π°ΡΠ»Π΅Π΄ΠΈΠ΅ Π²ΡΠ΅ΠΌΡΠ½, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π±ΠΎΡΠΎΠ»ΠΈΡΡ Π·Π° Π΄ΠΎΡΡΠΎΠΉΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ ΠΈ Ρ Π½ΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΎΡΡ. ΠΠΎ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ- ΠΈ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ? ΠΠ°ΠΊ ΠΎΠ±ΡΡΡΠ½ΠΈΠ» ΠΠ²ΠΈΠ΄ΠΎ Π²Π°Π½ Π ΠΎΡΡΡΠΌ, Π±Π΅Π· GIL Π½Π΅ Π±ΡΠ΄ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Python. ΠΡΡ ΡΠΏΠ°Π΄ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: Python 3 ΡΡΠ°Π½Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ Python 2, Π° ΡΡΠΎ Π½ΠΈΠΊΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
Β«ΠΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ Π³Π΅ΡΠΎΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ΄ΡΡ Π² ΠΎΠ±Ρ ΠΎΠ΄Β»
Π¨Π»ΡΠ· ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ 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 ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π°
Π‘ΡΠΎΠΈΡ Π»ΠΈ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ c GIL ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ? ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π΅ΡΡΡ Ρ ΡΠΎΠ±ΠΎΠΉ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ»ΡΡΠΎΠ², ΡΠ΅ΠΌ ΠΌΠΈΠ½ΡΡΠΎΠ².
ΠΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
ΠΠ½ΠΎΠ½Ρ β Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Python
Π‘Π°ΠΌΠΎΠ΅ ΡΠΌΠ΅ΡΠ½ΠΎΠ΅, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ GIL Π·Π°ΡΠΈΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π½Π°Ρ ΠΊΠΎΠ΄ ΠΎΡ Π²Π·Π°ΠΈΠΌΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (deadlock) ΠΈ Π΄ΡΡΠ³ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ°Π·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎ ΡΠ³Π»Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² Java, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ². ΠΠ± ΡΡΠΎΠΌ ΠΈ ΠΎ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π² ΡΡΠ°ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ threading ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·.
ΠΠ· ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ Ρ Python Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΄ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° ΡΡΠΈΡΡΠ²Π°ΡΡ. ΠΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² Python Π½ΡΠΆΠ½Π°, Π° ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠ°Π΅Ρ.
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ»ΡΡΠΈΡ ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ . Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΡΠΎΠΊ ΠΈ ΡΠ΅ΠΌ ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΌΡ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ Π² ΡΡΠ°ΡΡΠ΅ Β«ΠΠ½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°: ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³ mutex’ΠΎΠΌΒ». Π’ΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π° Java, Π½ΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π²Π΅ΡΠ½Ρ ΠΈ Π΄Π»Ρ Python. Π‘ΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (mutex), ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΠΎΠ±ΡΡΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π°ΠΊΡΠ΅Π½Ρ Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ Python, Π΅Π³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°Ρ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ , ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΡ.
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² Python Π±Π΅Π· Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ:
ΠΠΎΠΊΠ° Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠ½ΠΊΡ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ Π² Python
ΠΠ΅ΡΠΎΠ΄ 1 β Β«ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉΒ»
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ threading ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Thread. Π Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΈΡΠ΅ΠΌ:
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ Thread() β Ρ Π½Π΅ΠΉ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ:
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ target β ΡΡΠΎ Β«ΡΠ΅Π»Π΅Π²Π°ΡΒ» ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅. Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ ΡΡΠ΄ΡΠ±Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»ΠΈΠΌΡΠΌ, Π° ΠΊΡΠΎ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ args=(x,y). ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ Β«ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π·Π°ΠΏΠΈΡΡ Π²ΠΈΠ΄Π° kwargs=<βpropβ:120>.
Π Π°Π΄ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΈΠΌΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ name=Β«ΠΠΌΡ ΠΏΠΎΡΠΎΠΊΠ°Β». ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ name Ρ ΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null. Π Π΅ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° group, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β None.
ΠΠ° Π΄Π΅Π»ΠΎ! ΠΡΡΡΡ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π² ΡΠ²ΠΎΠΉ ΡΠ°ΠΉΠ» Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π·Π°Π΄ΡΠΌΠ°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ ΠΈ ΠΈΠΌΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ.
Π§ΡΠΎ start() Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π²Ρ ΡΠΆΠ΅ Π΄ΠΎΠ³Π°Π΄Π°Π»ΠΈΡΡ. ΠΠ΅ΡΠΎΠ΄ join() ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠ΅Π΄Ρ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ ΠΎΡΠΊΡΡΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«Π£Ρ ΠΎΠ΄Ρ, Π³Π°ΡΠΈΡΠ΅ ΡΠ²Π΅ΡΒ». ΠΠ°Π²Π΅ΡΡΠ°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ Π² ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈ ΡΠ²Π½ΠΎ β Π½Π°Π΄ΡΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΡΠ½Π°ΡΡΠΆΠΈ ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΊΠΎΠ³Π΄Π°. ΠΠ΅Π½ΡΡΠ΅ ΡΠΈΡΠΊ, ΡΡΠΎ Π²ΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠ°ΠΊΡΠΎΡΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ.
ΠΠ΅ΡΠΎΠ΄ 2 β Β«ΠΊΠ»Π°ΡΡΠΎΠ²ΡΠΉΒ»
ΠΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΈΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΡΡ ΠΎΡ Thread ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ threading. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ run() ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π’Ρ ΠΆΠ΅ ΠΏΠ΅ΡΡΡΡΠΊΡ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈ Π² Java.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
Π§ΡΠΎΠ±Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π½ΡΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ΅Π±Ρ Π²Π΅Π΄ΡΡ. Π Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π² 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! ΠΠΎΡΠΎΠ³Ρ Π²Π°ΠΌ ΠΏΡΠ΅Π³ΡΠ°Π΄ΠΈΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΡΠ»ΡΠ·β¦ ΠΠ°ΠΆΠ΅ ΡΠ°ΠΊ β Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΠ· (Global Interpreter Lock, ΠΎΠ½ ΠΆΠ΅ GIL), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ Π½Π° Π²ΡΠ΅Ρ mutex, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ Π½ΠΈ Π² C, Π½ΠΈ Π² Java.
ΠΠ°Π΄Π°ΡΠ° ΡΠ»ΡΠ·Π° β ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ, ΡΡΠΎΠ± Π½Π΅ Π»Π΅ΡΠ°Π»ΠΈ Π½Π°ΠΏΠ΅ΡΠ΅Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΡΡΠΈΡΡΠ΅ΠΉΡΠ΅ΡΡ, ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ ΡΠ³ΡΠΎΠ·Ρ ΡΠ°Π±ΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
ΠΠ΅Π· ΡΠ»ΡΠ·Π° ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΡΠ΅Π·Π°Π»ΠΈ Π±Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΌΡΡΠΈ, Π½ΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π²ΡΡ. ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π·Π°ΡΡΠΏΠ°ΡΡ Π·Π° ΡΡΠ»ΡΠΌ! ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, Π²ΠΎΠ²ΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ²ΡΠ΅ΠΌΡ β ΠΏΡΠΎΡΡΠΎ ΡΡΡΠΏΠ»ΡΠ΅Ρ ΠΈΡ Π² Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³Π° ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ.
ΠΠ΅Π·ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΡΠΎΡΠΎΠ½ΠΎΠΊ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΈΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΡΡΠΏΠ°Π», ΡΠΈΡΠΊΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π°Π»ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΡΠΏΠΈΠΊΠΎΠ²ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ (deadlock). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ½ΠΎΠΌ ΠΠΎΡΠΎΠΊ 1 Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ, Π° ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΡ Π½Π΅ Π½Π°ΡΡΠ» Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Ρ.ΠΊ. ΠΈΡ ΡΠ΄Π°Π»ΠΈΠ» ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°Π» ΠΠΎΡΠΎΠΊ 2.
Π§ΡΠΎΠ±Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ, GIL Π² ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π· Π² 5 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ Π΄Π»Ρ Python 3.2+) ΠΊΠΎΠΌΠ°Π½Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ: Β«Π‘ΠΠΠΠΠ’Π¬!Β» β ΡΠΎΡ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ΅Π·ΠΆΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΆΠ΅Π»Π°ΡΡΠ΅ΠΌΡ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΆΠ΅Π»Π°ΡΡΠ΅Π³ΠΎ Π½Π΅Ρ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ»ΡΠ·Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠΎ, Π° ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ. ΠΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ β ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡ ΠΎΠ΄ΠΈΡ Π½Π° ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²ΠΊΡ Β«Π΄ΠΎΡΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡΒ». Π Π·Π½Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π³ΡΠ°ΡΠΈΠΊΠΈ, ΡΠ°ΡΡΠ΅Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌ Π΄Π°Π½Π½ΡΡ c GIL ΠΈΠ΄ΡΡ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄ΠΎΠ»Π³ΠΎ.
Π ΡΡΠ°ΡΡΠ΅ Β«Understanding Python GILΒ»ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Gaglers Inc. ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎ ΡΡΠ°ΠΆΠ΅ΠΌ Chetan Giridhar ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠΎΠ΄ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° 100 000 ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ»ΠΎ Ρ ΠΌΠ°ΡΠΈΠ½Ρ Π½Π° ΡΡΡ Π·Π°Π΄Π°ΡΡ. ΠΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΄ΡΠ΅ ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π°Π½ΡΠ»ΠΈ 3,4 ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π’ΠΎΠ³Π΄Π° Π§Π΅ΡΠ°Π½ ΡΠΎΠ·Π΄Π°Π» ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ» Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. Π Π°ΡΡΠ΅Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° Π½Π° Π΄Π²ΡΡ ΡΠ΄ΡΠ°Ρ Π΄Π»ΠΈΠ»ΡΡ 6,2 ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π Π²Π΅Π΄Ρ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΠ»Π° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ! ΠΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠ΅Π½Π° Π·Π°Π΄Π°ΡΠ°, Π΅ΡΠ»ΠΈ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ thread2. Π― ΠΏΠΎΠ»ΡΡΠΈΠ»Π° Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π½ΠΎ Π²Π΄Π²ΠΎΠ΅.
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΠ· β Π½Π°ΡΠ»Π΅Π΄ΠΈΠ΅ Π²ΡΠ΅ΠΌΡΠ½, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π±ΠΎΡΠΎΠ»ΠΈΡΡ Π·Π° Π΄ΠΎΡΡΠΎΠΉΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ ΠΈ Ρ Π½ΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΎΡΡ. ΠΠΎ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ- ΠΈ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ? ΠΠ°ΠΊ ΠΎΠ±ΡΡΡΠ½ΠΈΠ» ΠΠ²ΠΈΠ΄ΠΎ Π²Π°Π½ Π ΠΎΡΡΡΠΌ, Π±Π΅Π· GIL Π½Π΅ Π±ΡΠ΄ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Python. ΠΡΡ ΡΠΏΠ°Π΄ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: Python 3 ΡΡΠ°Π½Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ Python 2, Π° ΡΡΠΎ Π½ΠΈΠΊΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
Β«ΠΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ Π³Π΅ΡΠΎΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ΄ΡΡ Π² ΠΎΠ±Ρ ΠΎΠ΄Β»
Π¨Π»ΡΠ· ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ 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 ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π°
Π‘ΡΠΎΠΈΡ Π»ΠΈ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ c GIL ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ? ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π΅ΡΡΡ Ρ ΡΠΎΠ±ΠΎΠΉ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ»ΡΡΠΎΠ², ΡΠ΅ΠΌ ΠΌΠΈΠ½ΡΡΠΎΠ².
ΠΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
ΠΠ½ΠΎΠ½Ρ β Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Python
Π‘Π°ΠΌΠΎΠ΅ ΡΠΌΠ΅ΡΠ½ΠΎΠ΅, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ GIL Π·Π°ΡΠΈΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π½Π°Ρ ΠΊΠΎΠ΄ ΠΎΡ Π²Π·Π°ΠΈΠΌΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (deadlock) ΠΈ Π΄ΡΡΠ³ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ°Π·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎ ΡΠ³Π»Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² Java, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ². ΠΠ± ΡΡΠΎΠΌ ΠΈ ΠΎ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π² ΡΡΠ°ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ threading ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·.