Threadlarni Yaratish

Python threads.

SU

Threadlarni Yaratish

Threadlar haqida faqat gaplashish ularni tushunishni qiyinlashtiradi. Haqiqiy kod yozishni o'rganish har doim yaxshi. Ushbu bo'limda siz threading modulidan foydalanasiz, bu modul ostida _thread moduli mavjud.

threading moduli uchun to'liq hujjatlarni quyidagi havolada topishingiz mumkin:

Endi bir nechta threadlarni yaratishning oddiy misolini ko'rib chiqamiz. Quyidagi kodni worker_threads.py nomli faylga joylashtiring:

# worker_threads.py
 
import random
import threading
import time
 
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__':
    for i in range(5):
        thread = threading.Thread(
            target=worker,
            args=(f'computer_{i}',),
        )
        thread.start()

Birinchi uchta import sizga random, threading, va time modullariga kirish imkonini beradi. random modulini tasodifiy raqamlar yaratish yoki ketma-ketlikdan tasodifiy element tanlash uchun ishlatishingiz mumkin. threading moduli threadlarni yaratish uchun ishlatiladi, va time moduli esa vaqt bilan bog'liq ko'plab vazifalarni bajarish uchun ishlatiladi.

Ushbu kodda, siz time modulidan "worker" kodi ishlayotgan vaqtni tasodifiy tarzda kutish uchun foydalanasiz. Keyin, worker() funksiyasini yaratib, unga ishchi nomini uzatasiz. Bu funksiya chaqirilganda, qaysi ishchi ishlay boshlaganini chop etadi. So'ngra, 1 dan 5 gacha bo'lgan tasodifiy raqam tanlanadi. Bu raqamni ishlatib, ishchi qancha vaqt ishlaganini simulyatsiya qilish uchun time.sleep() ishlatiladi. Nihoyat, ishchi tugagani va ish davomida qancha vaqt ketganini bildirish uchun xabar chop etiladi.

Kodning oxirgi qismi 5 ta ishchi thread yaratadi. Thread yaratish uchun, worker() funksiyasini threadning chaqirishi kerak bo'lgan maqsad funktsiyasi sifatida uzatasiz. Keyingi argument sifatida, thread maqsad funksiyasiga uzatadigan argumentlar tuplamini berasiz. So'ng, thread.start() ni chaqirib, threadni ishga tushirasiz.

Funksiya bajarilishi to'xtaganda, Python threadni o'chiradi.

Kodni ishga tushirib ko'ring va natijada quyidagi kabi chiqishni ko'rishingiz mumkin:

Started worker computer_0
Started worker computer_1
Started worker computer_2
Started worker computer_3
Started worker computer_4
computer_0 worker finished in 1 seconds
computer_3 worker finished in 1 seconds
computer_4 worker finished in 3 seconds
computer_2 worker finished in 3 seconds
computer_1 worker finished in 4 seconds

Sizning chiqishingiz yuqoridagidan farq qiladi, chunki ishchilar sleep() funksiyasini tasodifiy vaqt davomida ishlatadilar. Aslida, agar kodni bir necha marta ishga tushirsangiz, har bir bajarilishi ehtimoliy ravishda boshqacha natijaga ega bo'ladi.

threading.Thread – bu klass. Uning to'liq ta'rifi quyidagicha:

threading.Thread(
    group=None, target=None, name=None,
    args=(), kwargs={},
    *,
    daemon=None,
)

Threadlarni yaratishda, siz nomlarni worker() funksiyasida emas, balki threadni yaratishda ham berishingiz mumkin edi. args va kwargs – bu maqsad funksiyasining argumentlari. Python'da threadni daemon qilib belgilashni ham ko'rsatishingiz mumkin. "Daemon thread"lar Python interpretatoriga hech qanday talab qo'ymaydi, bu esa ikkita asosiy natijaga olib keladi:

  1. Agar faqat daemon threadlar qolsa, Python o'zini o'chiradi,
  2. Python o'chirilganda, daemon threadlar hech qanday bildirishsiz to'xtatiladi. group parametri kelajakda Python tiliga ThreadGroup qo'shilishi uchun kiritilgan, shuning uchun uni hozircha o'zgartirishga hojat yo'q.

Last updated on

On this page

Xato haqida xabar berish