Python - Utas Utama

Halo, pemrogram penyepuh! Hari ini, kita akan melakukan perjalanan yang menarik ke atas dunia threading Python, dengan fokus pada utas utama. Sebagai guru sains komputer yang ramah dan tetangga, saya di sini untuk membimbing anda melalui topik yang menarik ini. Jangan khawatir jika anda baru kepada pemrograman – kita akan memulakan dari asas dan membesarkaninya. Jadi, ambil minuman kesukaan anda, dapatkan keselesaan, dan mari kita melompat masuk!

Python - Main Thread

Apa itu Utas Utama?

Sebelum kita mendalamkan butiran, mari kita faham apa itu utas. Bayangkan anda membaca buku sambil mendengarkan musik. Otak anda melakukan dua tugas secara serentak – itulah seperti cara kerja utas di dalam pemrograman. Utas utama adalah seperti alur utama program anda, yang yang bermula apabila anda menjalankan skrip Python anda.

Utas Utama dalam Tindakan

Mari kita memulakan dengan contoh yang ringkas untuk melihat utas utama dalam tindakan:

import threading
import time

def cetak_utas_sekarang():
print(f"Utas sekarang: {threading.current_thread().name}")

cetak_utas_sekarang()
time.sleep(2)
print("Utas utama masih berjalan!")

Apabila anda menjalankan skrip ini, anda akan lihat seperti berikut:

Utas sekarang: MainThread
Utas utama masih berjalan!

Dalam contoh ini, kita menggunakan modul threading untuk mengakses maklumat tentang utas saat ini. Fungsi time.sleep(2) hanya ada untuk menambah jeda sedikit, seperti ellipsis yang dramatik dalam cerita pemrograman kita.

Mengakses Utas Utama

Sekarang kita telah lihat utas utama dalam tindakan, mari kita belajar bagaimana untuk mengaksesnya secara langsung. Python menyediakan cara yang mudah untuk melakukan ini:

import threading

utas_utama = threading.main_thread()
print(f"Nama utas utama: {utas_utama.name}")
print(f"ID utas utama: {utas_utama.ident}")

Skrip ini akan menghasilkan output seperti berikut:

Nama utas utama: MainThread
ID utas utama: 140735268892672

ident adalah pengenal unik untuk utas. Ia seperti nombor penyegaraan bagi utas – tiada dua utas yang akan memiliki ID yang sama.

Memeriksa jika Kita di atas Utas Utama

Bila-bila masa, anda mungkin ingin memeriksa jika kod anda berjalan di atas utas utama. Ini adalah bagaimana anda boleh melakukan itu:

import threading

def apakah_saya_utama():
return threading.current_thread() == threading.main_thread()

print(f"Adakah kita di atas utas utama? {apakah_saya_utama()}")

def bukan_utama():
print(f"Adakah kita di atas utas utama sekarang? {apakah_saya_utama()}")

thread = threading.Thread(target=bukan_utama)
thread.start()
thread.join()

Skrip ini akan menghasilkan:

Adakah kita di atas utas utama? True
Adakah kita di atas utas utama sekarang? False

Dalam contoh ini, kita membuat utas baru yang menjalankan fungsi bukan_utama(). Apabila kita memanggil apakah_saya_utama() dari utas baru ini, ia mengembalikan False.

Tingkah Laku Utas Utama di Python

Utas utama di Python memiliki beberapa tingkah laku yang menarik yang penting untuk dipahami. Mari kita eksplorasi mereka!

Utas Utama dan Pengakhiran Program

Satu tingkah laku utama utas adalah apabila ia selesai melakukan eksekusi, keseluruhan program Python biasanya dihentikan. Mari lihat ini dalam tindakan:

import threading
import time

def tugas_panjang():
print("Mula tugas panjang...")
time.sleep(5)
print("Tugas panjang selesai!")

thread = threading.Thread(target=tugas_panjang)
thread.start()

print("Utas utama sudah selesai!")

Apabila anda menjalankan skrip ini, anda akan mungkin lihat:

Mula tugas panjang...
Utas utama sudah selesai!

Perhatikan bahwa pesan "Tugas panjang selesai!" tidak muncul. Ini adalah kerana utas utama selesai dan program dihentikan sebelum tugas panjang dapat selesai.

Utas Daemon vs Utas Bukan Daemon

Untuk memahami tingkah laku utas utama lebih baik, kita perlu membicarakan tentang utas daemon. Utas daemon adalah seperti tugas latar yang tidak menghalang program dari keluar. Mari kitaubah contoh sebelumnya:

import threading
import time

def tugas_panjang():
print("Mula tugas panjang...")
time.sleep(5)
print("Tugas panjang selesai!")

thread = threading.Thread(target=tugas_panjang)
thread.daemon = True  # Tetapkan utas sebagai daemon
thread.start()

print("Utas utama sudah selesai!")

Output akan sama seperti sebelumnya. Walau bagaimanapun, jika kita buang baris thread.daemon = True, kita akan lihat:

Mula tugas panjang...
Utas utama sudah selesai!
Tugas panjang selesai!

Ini adalah kerana utas bukan daemon (yang default) menghalang program dari keluar sehingga mereka selesai.

Utas Utama Menunggu Utas Lain

Biasanya, anda akan ingin utas utama anda menunggu utas lain selesai sebelum mengakhiri program. Python menyediakan cara yang mudah untuk melakukan ini:

import threading
import time

def tugas(nama):
print(f"Tugas {nama} mula...")
time.sleep(2)
print(f"Tugas {nama} selesai!")

threads = []
for i in range(3):
t = threading.Thread(target=tugas, args=(f"T{i}",))
threads.append(t)
t.start()

for t in threads:
t.join()

print("Semua tugas selesai!")

Skrip ini akan menghasilkan:

Tugas T0 mula...
Tugas T1 mula...
Tugas T2 mula...
Tugas T0 selesai!
Tugas T1 selesai!
Tugas T2 selesai!
Semua tugas selesai!

Metode join() membuat utas utama menunggu sehingga setiap utas selesai kerjanya.

Jadual beberapa Metode Utas berguna yang Kita Berbicara dan Beberapa Lagi

Berikut adalah jadual beberapa metode utas berguna yang kita berbicara dan beberapa lagi:

Metode Keterangan
threading.current_thread() Kembalikan objek Utas saat ini
threading.main_thread() Kembalikan objek Utas utama
Thread.start() Mulai aktiviti utas
Thread.join() Tunggu hingga utas berakhir
Thread.is_alive() Kembalikan jika utas masih hidup
Thread.setDaemon(bool) Tetapkan bendera daemon utas

Penutup

Selamat! Anda baru saja mengambil langkah pertama anda ke atas dunia threading Python. Kita telah membahas utas utama, bagaimana mengaksesnya, tingkah lakunya, dan bagaimana ia berinteraksi dengan utas lain. Ingat, threading bisa menjadi topik yang kompleks, tetapi dengan latihan, anda akan menjadi lebih selesa dengan itu.

Sebagai penutup, saya ingat akan Kutipan oleh ahli sains komputer terkenal Alan Kay: "Cara terbaik untuk memprediksi masa depan adalah untuk menciptakannya." Dengan pengetahuan baru anda tentang threading Python, anda kini dilengkapi untuk menciptakan beberapa program multi-utas yang menakjubkan!

Terus koding, terus belajar, dan yang paling penting, bersenang-senang! Sampaijumpa lagi, happy threading!

Credits: Image by storyset