Найти Π² Π”Π·Π΅Π½Π΅
CODERIKK

πŸ”Ή ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Python: threading vs asyncio

πŸ”Ή Когда Π»ΡƒΡ‡ΡˆΠ΅ threading, Π° ΠΊΠΎΠ³Π΄Π° asyncio? πŸ”Έ Π‘Π΅Π· конкурСнтности (concurrency) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ простаиваСт ΠΏΡ€ΠΈ I/O: ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΆΠ΄ΡƒΡ‚, throughput ΠΏΠ°Π΄Π°Π΅Ρ‚. threading ΠΈ asyncio Π΄Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (parallelism) Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс. πŸ”Έ threading β€” это OS‑потоки. ΠŸΡ€ΠΎΡΡ‚Π°Ρ модСль: запустил Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Thread. Π₯ΠΎΡ€ΠΎΡˆΠΎ для Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ I/O ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Cβ€‘Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ GIL (Global Interpreter Lock). πŸ”Έ GIL (Global Interpreter Lock) ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python‑байткода: для CPU‑bound Π·Π°Π΄Π°Ρ‡ threading Π½Π΅ даст ускорСния β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ multiprocessing ΠΈΠ»ΠΈ C/Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. πŸ”Έ asyncio β€” ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ + event loop. Π­ΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ тысячах ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… I/O, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ async‑совмСстимых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠ΄Π°. import asyncio async def task(n): await asyncio.sleep(1) return n async def main(): await asyncio.gather(*(task(i) for i in range(1000))) asyncio.run(main()) πŸ“š Для many I/O β€” asyncio; для простоты ΠΈ C‑кодa β€” thr

πŸ”Ή ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Python: threading vs asyncio

πŸ”Ή Когда Π»ΡƒΡ‡ΡˆΠ΅ threading, Π° ΠΊΠΎΠ³Π΄Π° asyncio?

πŸ”Έ Π‘Π΅Π· конкурСнтности (concurrency) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ простаиваСт ΠΏΡ€ΠΈ I/O: ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΆΠ΄ΡƒΡ‚, throughput ΠΏΠ°Π΄Π°Π΅Ρ‚. threading ΠΈ asyncio Π΄Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (parallelism) Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс.

πŸ”Έ threading β€” это OS‑потоки. ΠŸΡ€ΠΎΡΡ‚Π°Ρ модСль: запустил Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Thread. Π₯ΠΎΡ€ΠΎΡˆΠΎ для Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ I/O ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Cβ€‘Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ GIL (Global Interpreter Lock).

πŸ”Έ GIL (Global Interpreter Lock) ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python‑байткода: для CPU‑bound Π·Π°Π΄Π°Ρ‡ threading Π½Π΅ даст ускорСния β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ multiprocessing ΠΈΠ»ΠΈ C/Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

πŸ”Έ asyncio β€” ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ + event loop. Π­ΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ тысячах ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… I/O, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ async‑совмСстимых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠ΄Π°.

import asyncio

async def task(n):

await asyncio.sleep(1)

return n

async def main():

await asyncio.gather(*(task(i) for i in range(1000)))

asyncio.run(main())

πŸ“š Для many I/O β€” asyncio; для простоты ΠΈ C‑кодa β€” threading; для CPU‑bound β€” multiprocessing.

#CODERIKK #Python #Middle

➑️ ΠœΡ‹ Π² Telegram - Π‘Π΅Ρ‚ΠΊΠ΅ - Π”Π·Π΅Π½

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ вашСй Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π·Π΄Π΅ΡΡŒβ¬‡οΈ