Python - Utas Utama

Halo, para pemrogram berprestasi! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia threading Python, dengan fokus pada utas utama. Sebagai guru ilmu komputer ramah yang tinggal di sekitar, saya di sini untuk membimbing Anda melalui topik yang menarik ini. Jangan khawatir jika Anda masih baru dalam pemrograman – kita akan mulai dari dasar-dasar dan maju ke tingkat yang lebih tinggi. Jadi, ambil minuman kesukaan Anda, rasakan kenyamanan, dan mari kita melompatlah!

Python - Main Thread

Apa itu Utas Utama?

Sebelum kita mendalami secara spesifik, mari kita mengerti apa itu utas. Bayangkan Anda membaca sebuah buku sambil mendengarkan musik. Otak Anda melakukan dua tugas sekaligus – itulah seperti cara kerja utas dalam pemrograman. Utas utama adalah seperti alur utama program Anda, yang dimulai saat Anda menjalankan skrip Python Anda.

Utas Utama dalam Aksi

Mari kita mulai dengan contoh sederhana untuk melihat utas utama dalam aksi:

import threading
import time

def cetak_utas_saat_ini():
print(f"Utas saat ini: {threading.current_thread().name}")

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

Ketika Anda menjalankan skrip ini, Anda akan melihat sesuatu seperti ini:

Utas saat ini: MainThread
Utas utama masih berjalan!

Dalam contoh ini, kita menggunakan modul threading untuk mengakses informasi tentang utas saat ini. Fungsi time.sleep(2) hanya ditambahkan untuk membuat sedikit jeda, seperti ellipsis yang dramatis dalam cerita pemrograman kita.

Mengakses Utas Utama

Sekarang bahwa kita telah melihat utas utama dalam aksi, mari kita pelajari bagaimana 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 ini:

Nama utas utama: MainThread
ID utas utama: 140735268892672

ident adalah pengenal unik untuk utas. Itulah seperti nomor sekuritas sosial untuk utas – tidak ada dua utas yang memiliki ID yang sama.

Memeriksa apakah Kita di Utas Utama

Terkadang, Anda mungkin ingin memeriksa apakah kode Anda berjalan di utas utama. Berikut ini adalah cara Anda dapat melakukannya:

import threading

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

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

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

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

Skrip ini akan menghasilkan:

Apakah kita di utas utama? True
Apakah kita di utas utama sekarang? False

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

perilaku Utas Utama di Python

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

Utas Utama dan Akhirnya Program

Salah satu perilaku utas utama adalah bahwa saat itu selesai menjalankan, seluruh program Python biasanya akan berakhir. Mari lihat ini dalam aksi:

import threading
import time

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

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

print("Utas utama selesai!")

Jika Anda menjalankan skrip ini, Anda akan mungkin melihat:

Memulai tugas panjang...
Utas utama selesai!

Perhatikan bahwa pesan "Tugas panjang selesai!" tidak muncul. Ini karena utas utama selesai dan program berakhir sebelum tugas panjang dapat diselesaikan.

Utas Daemon vs Utas Non-Daemon

Untuk memahami perilaku utas utama lebih baik, kita perlu membicarakan tentang utas daemon. Utas daemon adalah seperti tugas latar belakang yang tidak menghalangi program untuk keluar. Mari kita modifikasi contoh sebelumnya:

import threading
import time

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

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

print("Utas utama selesai!")

Outputnya akan tetap sama seperti sebelumnya. Namun, jika kita menghapus baris thread.daemon = True, kita akan melihat:

Memulai tugas panjang...
Utas utama selesai!
Tugas panjang selesai!

Ini karena utas non-daemon (default) menghalangi program dari keluar sampai mereka selesai.

Utas Utama Menunggu Utas Lain

Seringkali, Anda akan ingin utas utama Anda menunggu utas lain selesai sebelum mengakhiri program. Python menyediakan cara sederhana untuk melakukan ini:

import threading
import time

def tugas(nama):
print(f"Tugas {nama} dimulai...")
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 dimulai...
Tugas T1 dimulai...
Tugas T2 dimulai...
Tugas T0 selesai!
Tugas T1 selesai!
Tugas T2 selesai!
Semua tugas selesai!

Metode join() membuat utas utama menunggu sampai setiap utas telah menyelesaikan pekerjaannya.

Tabel Metode Threading yang berguna

Berikut adalah tabel beberapa metode threading yang berguna yang kita diskusikan dan beberapa lagi:

Metode Deskripsi
threading.current_thread() Mengembalikan objek Thread saat ini
threading.main_thread() Mengembalikan objek Thread utama
Thread.start() Memulai aktivitas thread
Thread.join() Menunggu sampai thread berakhir
Thread.is_alive() Mengembalikan apakah thread masih hidup
Thread.setDaemon(bool) Setel flag daemon thread

Kesimpulan

Selamat! Anda baru saja melakukan langkah pertama Anda ke dunia threading Python. Kita telah membahas utas utama, bagaimana mengaksesnya, perilakunya, dan bagaimana berinteraksi dengan utas lainnya. Ingat, threading dapat menjadi topik yang kompleks, tetapi dengan latihan, Anda akan menjadi lebih nyaman dengan itu.

Sebagai penutup, saya ingat sebuah kutipan oleh ilmu komputer terkenal Alan Kay: "Cara terbaik untuk memprediksi masa depan adalah untuk menciptakannya." Dengan pengetahuan baru Anda tentang threading Python, Anda sekarang memiliki persenjataan untuk menciptakan beberapa program multi-threaded yang menakjubkan!

Teruskan coding, teruskan belajar, dan yang paling penting, bersenang-senang! Sampai jumpa lagi, happy threading!

Credits: Image by storyset