Sobes.tech
Junior — Middle

შესაძლებელია მრავალპროცესორული მიდგომების გამოყენება, რათა გადაჭრათ შეზღუდული ამოცანები შეყვანა/გამოტანა ოპერაციებით?

sobes.tech AI

პასუხი AI-სგან

Python-да көппроцессорлы тәсілдер (multiprocessing) кіріс/шығыс операцияларымен шектелген тапсырмалар үшін қолданылуы мүмкін, бірақ бұл әрқашан тиімді емес. Себебі, кіріс/шығыс операциялары әдетте ағынды блоктайды, және мұндай жағдайларда асинхронды бағдарламалау немесе көпжолды қолдану жақсырақ, себебі Python I/O кезінде GIL (Global Interpreter Lock)-ты босатады.

Мультипроцессинг CPU-ны интенсивті пайдаланады, себебі әр процесс жеке Python интерпретаторында жұмыс істейді және GIL-ты блоктамайды. I/O-ға негізделген тапсырмалар үшін әдетте, көпжолды немесе async/await жақсы нәтиже береді, себебі ағындар арасындағы ауысу тезірек және оңай.

Мысал ретінде, I/O-ға негізделген тапсырма үшін көпжолды қолдану:

import threading
import requests

def fetch_url(url):
    response = requests.get(url)
    print(f"{url}: {len(response.content)} bytes")

жолдар = []
urls = ["https://example.com", "https://python.org", "https://github.com"]
for url in urls:
    жол = threading.Thread(target=fetch_url, args=(url,))
    жол.start()
    жолдар.append(жол)

for жол in жолдар:
    жол.join()

Сондықтан, кіріс/шығысқа интенсив қолданылатын тапсырмалар үшін, көпжолды немесе асинхронды қолдану, multiprocessing-тан жақсырақ.