Creating a Process Pool

Python multiprocessing.

SU

Protsesslar hovuzini yaratish

Agar sizda ko‘p protsesslarni ishga tushirish zarurati bo‘lsa, ba’zida bir vaqtning o‘zida qancha protsess ishlashi mumkinligini cheklashni xohlaysiz. Masalan, 20 ta protsessni ishga tushirishingiz kerak, lekin sizda faqat 4 yadroli protsessor bor. multiprocessing moduli yordamida bir vaqtning o‘zida faqat 4 ta protsess ishlaydigan protsesslar hovuzini yaratishingiz mumkin.

Buni qanday amalga oshirishni ko‘rib chiqamiz:

import random
import time
 
from multiprocessing import Pool
 
def worker(name: str) -> None:
    print(f'Started worker {name}')
    worker_time = random.choice(range(1, 5))
    time.sleep(worker_time)
    print(f'{name} worker finished in {worker_time} seconds')
 
if __name__ == '__main__':
    process_names = [f'computer_{i}' for i in range(15)]
    pool = Pool(processes=5)
    pool.map(worker, process_names)
    pool.terminate()

Tushuntirish:

  1. worker funksiyasi: Bu funksiyaning vazifasi oldingi misollardagi kabi – har bir protsessning ishlashini simulyatsiya qilish.
  2. Protsesslar nomlari: 15 ta protsess uchun nomlar ro‘yxati yaratish uchun list comprehension ishlatilgan.
  3. Pool yaratish: Hovuzni yaratishda bir vaqtning o‘zida qancha protsess ishlashi kerakligini belgilaysiz (bu yerda 5).
  4. map() metodi: Bu metodga protsesslarni bajaradigan funksiya (worker) va argumentlar ro‘yxati (process_names) uzatiladi.
  5. terminate(): Hovuzni tozalash uchun ishlatiladi. Aks holda quyidagi kabi xatolik xabarlari paydo bo‘lishi mumkin:
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/reso\
urce_tracker.py:216:
UserWarning: resource_tracker: There appear to be 6 leaked semaphore objects to clea\
n up at shutdown

Ishlash prinsipi:

Python bir vaqtning o‘zida 5 yoki undan kam protsessni ishga tushiradi va ularning bajarilishi tugashi bilan navbatdagi protsesslarni boshlaydi. Shunday qilib, protsessor yadrolari ortiqcha yuklanmaydi.

Endi siz Python yordamida protsesslar hovuzini qanday yaratishni bilasiz!

Last updated on

On this page

Xato haqida xabar berish