Thread - bu alohida bajarilish oqimi. Bu sizning dasturingizda bir vaqtning o'zida ikkita
narsa sodir bo'lishini anglatadi. Ammo ko'pchilik Python 3 ilovalari
uchun turli xil iplar bir
vaqtning o'zida bajarilmaydi: ular shunchaki ko'rinadi.
Dasturingizda ikkita (yoki undan ko'p) turli protsessorlar ishlaydi,
ularning har biri bir
vaqtning o'zida mustaqil vazifani bajaradi deb o'ylash jozibali. Bu deyarli to'g'ri. Mavzular turli
protsessorlarda ishlayotgan bo'lishi mumkin, lekin ular bir vaqtning o'zida faqat bitta ishlaydi.
Bir vaqtning o'zida bir nechta vazifalarni bajarish uchun Python-ning nostandart amalga
oshirilishi, ba'zi kodlaringizni boshqa tilda yozish yoki qo'shimcha xarajatlar bilan birga keladigan
ko'p ishlov berishdan foydalanish kerak.
Python-ning CPython-ni qo'llash usuli tufayli, iplarni
ulash barcha vazifalarni
tezlashtirmasligi mumkin. Bu GIL bilan o'zaro aloqalar bilan bog'liq bo'lib, u bir vaqtning o'zida
bitta Python ipini ishlatishni cheklaydi.
Ko'p vaqtini tashqi hodisalarni kutishga sarflaydigan vazifalar, odatda, iplarni o'tkazish
uchun yaxshi nomzodlardir. Og'ir protsessor hisoblashni talab qiladigan
va tashqi hodisalarni
kutish uchun oz vaqt sarflaydigan muammolar umuman tez ishlamasligi mumkin.
Bu Python-da yozilgan va standart CPython ilovasida ishlaydigan kod uchun amal qiladi.
Agar sizning mavzularingiz C tilida yozilgan bo'lsa, ular GILni chiqarish va bir vaqtning o'zida
ishlash imkoniyatiga ega. Agar siz boshqa Python ilovasida ishlayotgan bo'lsangiz, uning iplarni
qanday ishlashini ko'rish uchun hujjatlar bilan tekshiring.
Agar siz standart Python ilovasini ishlatayotgan bo'lsangiz, faqat Python-da yozsangiz va
protsessor bilan bog'liq muammo bo'lsa, uning o'rniga multiprocessing modulini tekshirishingiz
kerak.
O'zingizning dasturingizni Threadlardan foydalanish uchun arxitektura qilish, shuningdek,
dizayn ravshanligini oshirishi mumkin. Ushbu qo'llanmada siz o'rganadigan
misollarning
aksariyati tezroq ishlashi shart emas, chunki ular threadlardan foydalanadi.
Ulardagi threadlardan
foydalanish dizaynni yanada toza va mulohaza yuritishni osonlashtiradi.
Mavzuni boshlash
Endi siz thread nima ekanligi haqida tasavvurga ega bo'lganingizdan so'ng, keling, uni
qanday yasashni o'rganamiz. Python standart kutubxonasi ushbu maqolada ko'rishingiz mumkin
bo'lgan ko'pgina ibtidoiy elementlarni o'z ichiga olgan ish zarralarini taqdim etadi. Thread, ushbu
modulda iplarni chiroyli tarzda qamrab oladi va ular bilan ishlash
uchun toza interfeysni
ta'minlaydi.
Agar siz ro'yxatga olish bayonotlarini ko'rib chiqsangiz, asosiy bo'lim mavzuni yaratish va
boshlashni ko'rishingiz mumkin:
Mavzuni yaratganingizda, siz unga funktsiyani va ushbu funktsiyaga argumentlarni o'z
ichiga olgan ro'yxatni o'tkazasiz.
Bunday holda, siz Thread-ga thread_function() ni ishga
tushirishni va uni argument sifatida 1 ni berishni aytasiz.
Siz mavzular uchun nom sifatida ketma-ket butun sonlardan foydalanasiz. Har bir mavzu
uchun noyob nomni qaytaradigan threading.get_ident() mavjud, lekin ular odatda
qisqa va oson
o'qilishi mumkin emas.
thread_function() ning o'zi ko'p ish qilmaydi. U shunchaki ba'zi xabarlarni ular orasida
time.sleep() bilan qayd qiladi.
Ushbu dasturni avvalgidek ishga tushirganingizda (yigirmanchi qator izohlangan holda),
natija quyidagicha ko'rinadi:
Do'stlaringiz bilan baham: