ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΡΠ΅Π±Π½ΠΈΠΊ ΠΏΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅ β 850 ΡΡΡΠ°Π½ΠΈΡ.
Β«The Rising Sea: Foundations of Algebraic GeometryΒ» Π Π°Π²ΠΈ ΠΠ°ΠΊΠΈΠ»Π°.
ΠΠ½ΠΈΠ³Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΡΠΈΡΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°Π½ΠΈΠΉ: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²Π²ΠΎΠ΄ΡΡΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° β ΠΎΡ ΡΠ΅ΠΎΡΠΈΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ ΠΏΡΡΠΊΠΎΠ² Π΄ΠΎ ΠΊΠΎΠΌΠΌΡΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΈ Π³ΠΎΠΌΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ.
ΠΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π·Π²ΠΈΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΡ.
Π‘Π°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΉ ΡΡΠ΅Π±Π½ΠΈΠΊ Π΄Π»Ρ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² ΠΌΠ°Π³ΠΈΡΡΡΠ°ΡΡΡΡ ΠΈ Π°ΡΠΏΠΈΡΠ°Π½ΡΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΡΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Π΄Π»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Link: https://math.stanford.edu/~vakil/216blog/
Β«The Rising Sea: Foundations of Algebraic GeometryΒ» Π Π°Π²ΠΈ ΠΠ°ΠΊΠΈΠ»Π°.
ΠΠ½ΠΈΠ³Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΡΠΈΡΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°Π½ΠΈΠΉ: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²Π²ΠΎΠ΄ΡΡΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° β ΠΎΡ ΡΠ΅ΠΎΡΠΈΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ ΠΏΡΡΠΊΠΎΠ² Π΄ΠΎ ΠΊΠΎΠΌΠΌΡΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΈ Π³ΠΎΠΌΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ.
ΠΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π·Π²ΠΈΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΡ.
Π‘Π°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΉ ΡΡΠ΅Π±Π½ΠΈΠΊ Π΄Π»Ρ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² ΠΌΠ°Π³ΠΈΡΡΡΠ°ΡΡΡΡ ΠΈ Π°ΡΠΏΠΈΡΠ°Π½ΡΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΡΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Π΄Π»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Link: https://math.stanford.edu/~vakil/216blog/
π΄ ΠΠ°Π²ΡΡΠ° ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Middle Python Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈΠ· ΠΠ²ΠΈΡΠΎ
Π£ΠΆΠ΅ Π·Π°Π²ΡΡΠ° Π²Π΅ΡΠ΅ΡΠΎΠΌ Π² 19:00 ΠΏΠΎ ΠΌΡΠΊ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° ΠΎΡΠΊΡΡΡΠΎΠ΅ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ Π½Π° Middle Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ:
π ΠΠ°Π½Ρ, ΡΡΠ°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² ΠΠ²ΠΈΡΠΎ, Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ-Π΄ΠΎΠ±ΡΠΎΠ²ΠΎΠ»ΡΡΡ
π ΠΠ°Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠ°, ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΠ΅Π³ΠΎ ΠΎΡ Π²Π°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΡΡΡΠΈΠΉ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ
π Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΠ°Π½Π΅
ΠΡΠΎ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ. ΠΡΠΈΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠ΅Π½ΡΠΎΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡ Π¨ΠΠ Π’ΠΠΠ’ Π΄Π»Ρ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉ Π³ΡΠ΅ΠΉΠ΄, ΠΠ ΠΈ ΠΏΡΠΎΠΊΠ°ΡΠ°ΡΡ ΡΠΊΠΈΠ»Π»Ρ.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈ Π² Π½Π°ΡΠ΅Π³ΠΎ Π±ΠΎΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠΈΡ β @shortcut_py_bot
Π Π΅ΠΊΠ»Π°ΠΌΠ°.
Π ΡΠ΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°ΡΠ΅Π»Π΅.
Π£ΠΆΠ΅ Π·Π°Π²ΡΡΠ° Π²Π΅ΡΠ΅ΡΠΎΠΌ Π² 19:00 ΠΏΠΎ ΠΌΡΠΊ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° ΠΎΡΠΊΡΡΡΠΎΠ΅ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ Π½Π° Middle Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ:
π ΠΠ°Π½Ρ, ΡΡΠ°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² ΠΠ²ΠΈΡΠΎ, Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ-Π΄ΠΎΠ±ΡΠΎΠ²ΠΎΠ»ΡΡΡ
π ΠΠ°Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠ°, ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΠ΅Π³ΠΎ ΠΎΡ Π²Π°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΡΡΡΠΈΠΉ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ
π Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΠ°Π½Π΅
ΠΡΠΎ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ. ΠΡΠΈΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠ΅Π½ΡΠΎΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡ Π¨ΠΠ Π’ΠΠΠ’ Π΄Π»Ρ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉ Π³ΡΠ΅ΠΉΠ΄, ΠΠ ΠΈ ΠΏΡΠΎΠΊΠ°ΡΠ°ΡΡ ΡΠΊΠΈΠ»Π»Ρ.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈ Π² Π½Π°ΡΠ΅Π³ΠΎ Π±ΠΎΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠΈΡ β @shortcut_py_bot
Π Π΅ΠΊΠ»Π°ΠΌΠ°.
Π ΡΠ΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°ΡΠ΅Π»Π΅.
π ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· Python
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ Π½Π΅ Π½ΡΠΆΠ½Ρ
Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ:
-
-
-
-
ΠΡΠΈΠ±ΠΊΠΈ Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ²Π½ΠΎ:
ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΏΠΈΡΠΊΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
https://pythonmorsels.com/running-subprocesses-in-python/
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ Π½Π΅ Π½ΡΠΆΠ½Ρ
os.system() ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ Popen. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ subprocess.run() - ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄.
import subprocess
result = subprocess.run(
["git", "status", "--short"],
capture_output=True,
text=True,
check=True,
timeout=10,
)
print(result.stdout)
Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ:
-
capture_output=True ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ stdout ΠΈ stderr-
text=True Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ bytes-
check=True Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ CalledProcessError, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ-
timeout=10 Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ Π·Π°Π²ΠΈΡΠ½ΡΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π°ΠΡΠΈΠ±ΠΊΠΈ Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ²Π½ΠΎ:
import subprocess
try:
result = subprocess.run(
["git", "status", "--short"],
capture_output=True,
text=True,
check=True,
timeout=10,
)
except subprocess.TimeoutExpired:
print("ΠΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠ»Π³ΠΎ")
except subprocess.CalledProcessError as error:
print(error.stderr)
else:
print(result.stdout)
ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΏΠΈΡΠΊΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
shell=True Π½ΡΠΆΠ΅Π½ ΡΠ΅Π΄ΠΊΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅.subprocess.run() - ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ ΠΌΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Python ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ, Git, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, CLI-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ.ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
https://pythonmorsels.com/running-subprocesses-in-python/
ΠΠ΅ΡΠΎ, ΠΠ’-ΠΠΈΠΊΠ½ΠΈΠΊ ΠΈ ΠΌΡΠ·ΡΠΊΠ° ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ
Π°ΡΡΠΈΡΡΠΎΠ² ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ!
8 Π°Π²Π³ΡΡΡΠ° Π² ΠΠΎΠ»ΠΎΠΌΠ΅Π½ΡΠΊΠΎΠΌ ΠΏΡΠΎΠΉΠ΄Π΅Ρ ΠΠ’-ΠΠΈΠΊΠ½ΠΈΠΊ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ β Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° LAB ΠΠ½ΡΠΎΠ½Π° ΠΠ΅Π»ΡΠ΅Π²Π°, IOWA, Cream Soda, Pompeya, ΠΌΠ°ΡΡΠΈΠ½Π° ΠΈ Π‘ΠΎΠ²Ρ.
Π Π΄Π½Π΅ΠΌ β Π½Π°ΡΡΠΏΠΎΠΏ-Π»Π΅ΠΊΡΠΈΠΈ, Π΄ΠΈΡΠΊΡΡΡΠΈΠΈ ΠΎΠ± ΠΠ ΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ , ΠΌΠ°ΡΡΠ΅Ρ-ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Ρ. ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° ΠΈ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΆΠ΅ Π±ΡΠ΄ΡΡ.
ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠ·Π½Π°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ.
Π Π±ΠΈΠ»Π΅Ρ Π²Ρ ΠΎΠ΄ΠΈΡ +1 β ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π²Π°ΡΡ Π±Π»ΠΈΠ·ΠΊΠΈΡ ΠΈ Π΄ΡΡΠ·Π΅ΠΉ.
ΠΠΎ Π²ΡΡΡΠ΅ΡΠΈ Π² ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΈΡΡΠΆΠ΅Π½ΠΈΡ ΠΠ’.
8 Π°Π²Π³ΡΡΡΠ° Π² ΠΠΎΠ»ΠΎΠΌΠ΅Π½ΡΠΊΠΎΠΌ ΠΏΡΠΎΠΉΠ΄Π΅Ρ ΠΠ’-ΠΠΈΠΊΠ½ΠΈΠΊ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ β Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° LAB ΠΠ½ΡΠΎΠ½Π° ΠΠ΅Π»ΡΠ΅Π²Π°, IOWA, Cream Soda, Pompeya, ΠΌΠ°ΡΡΠΈΠ½Π° ΠΈ Π‘ΠΎΠ²Ρ.
Π Π΄Π½Π΅ΠΌ β Π½Π°ΡΡΠΏΠΎΠΏ-Π»Π΅ΠΊΡΠΈΠΈ, Π΄ΠΈΡΠΊΡΡΡΠΈΠΈ ΠΎΠ± ΠΠ ΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ , ΠΌΠ°ΡΡΠ΅Ρ-ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Ρ. ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° ΠΈ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΆΠ΅ Π±ΡΠ΄ΡΡ.
ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠ·Π½Π°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ.
Π Π±ΠΈΠ»Π΅Ρ Π²Ρ ΠΎΠ΄ΠΈΡ +1 β ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π²Π°ΡΡ Π±Π»ΠΈΠ·ΠΊΠΈΡ ΠΈ Π΄ΡΡΠ·Π΅ΠΉ.
ΠΠΎ Π²ΡΡΡΠ΅ΡΠΈ Π² ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΈΡΡΠΆΠ΅Π½ΠΈΡ ΠΠ’.
π Free-threaded Python ΡΠ±ΡΠ°Π» GIL, Π½ΠΎ NumPy Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΡΠΏΠΈΡΠ°Π»ΡΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, Python 3.13+ Π±Π΅Π· GIL Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅
Π NumPy 2.5 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΡΡΠ°Π½ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ·ΠΊΠΈΡ ΠΌΠ΅ΡΡ:
- ΡΠ°Π±Π»ΠΈΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ
- ΡΠ°ΡΡΡ ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ΄Π΅Π»Π°Π»ΠΈ Β«Π±Π΅ΡΡΠΌΠ΅ΡΡΠ½ΡΠΌΠΈΒ», ΡΠ½ΠΈΠ·ΠΈΠ² ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΡΡΠ΅ ΡΡΡΠ»ΠΎΠΊ;
- Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π»ΠΈ Π½Π°
Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ:
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄
ΠΠΎΡΠΎΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΠΉ CPU ΠΈ ΠΎΠ±ΡΡΡ ΠΏΠ°ΠΌΡΡΡ.
ΠΠΎ Π΅ΡΡΡ Π²Π°ΠΆΠ½Π°Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°:
free-threaded Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ thread-safe.
ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
- ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ worker;
- ΠΎΠ±ΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ;
- ΡΠ²Π½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ.
Π£Π΄Π°Π»ΠΈΡΡ GIL ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. Π§ΡΠΎΠ±Ρ Python Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΏΠΎ ΡΠ΄ΡΠ°ΠΌ, ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ NumPy.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, Python 3.13+ Π±Π΅Π· GIL Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅
ufunc Π½Π°ΡΠΈΠ½Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ NumPy, ΡΡΡΡΡΠΈΠΊΠΈ ΡΡΡΠ»ΠΎΠΊ ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.Π NumPy 2.5 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΡΡΠ°Π½ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ·ΠΊΠΈΡ ΠΌΠ΅ΡΡ:
- ΡΠ°Π±Π»ΠΈΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ
ufunc Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π½Π° lock-free concurrent hash map;- ΡΠ°ΡΡΡ ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ΄Π΅Π»Π°Π»ΠΈ Β«Π±Π΅ΡΡΠΌΠ΅ΡΡΠ½ΡΠΌΠΈΒ», ΡΠ½ΠΈΠ·ΠΈΠ² ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΡΡΠ΅ ΡΡΡΠ»ΠΎΠΊ;
- Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π»ΠΈ Π½Π°
PyMem_RawMalloc ΠΈ PyMem_RawFree.Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ:
from concurrent.futures import ThreadPoolExecutor
import numpy as np
arrays = [
np.random.rand(5_000_000)
for _ in range(8)
]
with ThreadPoolExecutor(max_workers=8) as pool:
results = list(pool.map(np.sin, arrays))
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄
multiprocessing - ΠΌΠ°ΡΡΠΈΠ²Ρ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ.ΠΠΎΡΠΎΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΠΉ CPU ΠΈ ΠΎΠ±ΡΡΡ ΠΏΠ°ΠΌΡΡΡ.
ΠΠΎ Π΅ΡΡΡ Π²Π°ΠΆΠ½Π°Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°:
free-threaded Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ thread-safe.
ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ
ndarray ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²ΡΡ Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π³ΠΎΠ½ΠΊΠ°ΠΌ, ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄ΡΠ½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
- ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ worker;
- ΠΎΠ±ΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ;
- ΡΠ²Π½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ.
Π£Π΄Π°Π»ΠΈΡΡ GIL ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. Π§ΡΠΎΠ±Ρ Python Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΏΠΎ ΡΠ΄ΡΠ°ΠΌ, ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ NumPy.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python