Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅
CODERIKK

πŸ”Ή ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ vs ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: python-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

πŸ”Ή Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ concurrency ΠΈ parallelism β€” ΠΈ ΠΊΠ°ΠΊ asyncio + threadpool ΠΈΠ³Ρ€Π°ΡŽΡ‚ вмСстС? πŸ”Έ concurrency Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ простаивания: позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ мноТСством Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ I/O (input/output). πŸ”Έ parallelism β€” Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ядрах CPU (central processing unit); Π½ΡƒΠΆΠ΅Π½ для ускорСния CPU-bound ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ даст прироста. πŸ”Έ ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°: для I/O-bound ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ asyncio; для Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ»ΠΈ CPU-bound Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” отправляйтС ΠΈΡ… Π² threadpool (ThreadPoolExecutor) ΠΈΠ»ΠΈ Π² process pool. asyncio управляСт ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌΠΈ, threadpool выполняСт Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. import asyncio from concurrent.futures import ThreadPoolExecutor def cpu_bound(x): return x*x async def main(): loop = asyncio.get_running_loop() with ThreadPoolExecutor() as tp: res = await loop.run_in_executor(tp, cpu_bound, 10) print(res) asyncio.run(main()) πŸ“š ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ: concurrency β‰  parallelism β€” ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ asyncio для I/O ΠΈ threadpool

πŸ”Ή ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ vs ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: python-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

πŸ”Ή Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ concurrency ΠΈ parallelism β€” ΠΈ ΠΊΠ°ΠΊ asyncio + threadpool ΠΈΠ³Ρ€Π°ΡŽΡ‚ вмСстС?

πŸ”Έ concurrency Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ простаивания: позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ мноТСством Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ I/O (input/output).

πŸ”Έ parallelism β€” Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ядрах CPU (central processing unit); Π½ΡƒΠΆΠ΅Π½ для ускорСния CPU-bound ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ даст прироста.

πŸ”Έ ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°: для I/O-bound ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ asyncio; для Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ»ΠΈ CPU-bound Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” отправляйтС ΠΈΡ… Π² threadpool (ThreadPoolExecutor) ΠΈΠ»ΠΈ Π² process pool. asyncio управляСт ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌΠΈ, threadpool выполняСт Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹.

import asyncio

from concurrent.futures import ThreadPoolExecutor

def cpu_bound(x):

return x*x

async def main():

loop = asyncio.get_running_loop()

with ThreadPoolExecutor() as tp:

res = await loop.run_in_executor(tp, cpu_bound, 10)

print(res)

asyncio.run(main())

πŸ“š ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ: concurrency β‰  parallelism β€” ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ asyncio для I/O ΠΈ threadpool/processes для тяТёлых Π·Π°Π΄Π°Ρ‡.

#CODERIKK #Python #Senior

➑️ ΠœΡ‹ Π² Telegram - Π‘Π΅Ρ‚ΠΊΠ΅ - Π’Πš

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