Academic Research in Educational Sciences Volume 4 | Issue 5 | 2023 ISSN: 2181-1385 ISI: 0,967 | Cite-Factor: 0,89 | SIS: 1,9 | ASI: 1,3 | SJIF: 5,771 | UIF: 6,1 sa 524 May, 2023 https://t.me/ares_uz Multidisciplinary Scientific Journal “chunk_size” „loop_body‟ uzunligini „num_procs‟ ga bo'lish yo'li bilan hisoblanadi.
Bu har bir jarayon bajariladigan sikl iboralari sonini aniqlaydi.
Har bir parallel jarayon uchun Process obyektlarini saqlash uchun „procs‟ deb
nomlangan ro'yxat yaratiladi.
Keyin, „num_procs‟ jarayonlarini yaratish uchun sikl ishlatiladi. Har bir
jarayon uchun boshlang'ich va tugatish indekslari „chunk_size‟ asosida aniqlanadi.
Har bir jarayonning maqsadi argument sifatida „loop_body‟, start va end ni qabul
qiluvchi „execute_loop_chunk‟ funksiyasiga o'rnatiladi.
„execute_loop_chunk‟ funksiyasi ichida sikl ko'rsatilgan diapazondagi (boshidan
oxirigacha - 1) sikl statementlarini takrorlash uchun ishlatiladi. Bu jarayon
bajariladigan sikl statementlarining bir qismini ifodalaydi. Sharhni parallel ravishda
bajarilishi kerak bo'lgan haqiqiy sikl logic i bilan almashtirishingiz mumkin.
Jarayonlar proc.start() yordamida boshlanadi va Process ob'ektlari procs ro'yxatiga
qo'shiladi.
Barcha jarayonlarni yaratgandan so'ng, har bir jarayon uchun proc.join() ni
chaqirish uchun boshqa sikl ishlatiladi. Bu davom etishdan oldin asosiy jarayon
barcha child processlarning tugashini kutishini ta'minlaydi.
Loop bayonotlarini bir nechta jarayonlarga taqsimlash va ularni parallel ravishda
bajarish orqali parallel siklni optimallashtirish siklning umumiy bajarilish vaqtini
yaxshilashga qaratilgan.
import multiprocessing
def parallel_loop_optimization(loop_body, num_procs):
chunk_size = len(loop_body) // num_procs
procs = []
for i in range(num_procs):
start = i * chunk_size
end = (i+1) * chunk_size if i != num_procs-1 else len(loop_body)
proc = multiprocessing.Process(target=loop_body[start:end])
proc.start()
procs.append(proc)
for proc in procs:
proc.join() [3]