Python - Menghentikan sebuah Thread

Halo, pemrogram Python yang berbakat! Hari ini, kita akan membahas tentang topik yang menarik: penghentian thread di Python. Jangan khawatir jika kamu masih baru di bidang pemrograman; saya akan membimbingimu langkah demi langkah, sama seperti yang saya lakukan untuk banyak siswa selama tahun-tahun mengajar saya. Mari kita mulai petualangan ini bersama!

Python - Interrupting a Thread

Apa itu Thread?

Sebelum kita melompat ke penghentian thread, mari kita singkatkan lagi apa itu thread. Bayangkan kamu sedang membaca sebuah buku (program utama) dan tiba-tiba ingat kamu harus membuat sebuah panggilan telepon. Kamu menandai halaman kamu (membuat sebuah thread), membuat panggilan, lalu kembali ke buku kamu. Itu mirip dengan cara kerja thread dalam pemrograman – mereka memungkinkan sebuah program untuk melakukan banyak hal pada saat yang sama.

Penghentian Thread

Sekarang, bayangkan kamu sedang melakukan panggilan telepon, tapi itu terlalu lama dan kamu ingin kembali ke buku kamu. Bagaimana kamu dapat memutuskan panggilan dengan sopan? Itu saat penghentian thread masuk kepermainan. Di Python, kita memiliki beberapa cara untuk melakukan ini:

  1. Menggunakan objek Event
  2. Menggunakan sebuah Flag

Mari kita eksplorasi kedua metode ini dengan beberapa contoh yang menarik!

Penghentian Thread menggunakan Objek Event

Objek Event seperti sebuah bendera yang dapat ditetapkan atau dibersihkan. Ketika bendera itu ditetapkan, itu memberi tanda kepada thread untuk berhenti.

Berikut adalah contoh sederhana:

import threading
import time

def pekerja(event):
while not event.is_set():
print("Bekerja...")
time.sleep(1)
print("Pekerja: Saya selesai!")

# Membuat objek event
stop_event = threading.Event()

# Membuat dan menjalankan thread
thread = threading.Thread(target=pekerja, args=(stop_event,))
thread.start()

# Biarkan thread berjalan selama 5 detik
time.sleep(5)

# Menetapkan event untuk memberi tanda kepada thread untuk berhenti
stop_event.set()

# Menunggu thread selesai
thread.join()

print("Utama: Semua selesai!")

Mari kita pecahkan ini:

  1. Kita mengimpor modul yang diperlukan: threading untuk bekerja dengan thread, dan time untuk menambahkan jeda.
  2. Kita mendefinisikan fungsi pekerja yang terus bekerja sampai event diatur.
  3. Kita membuat objek Event bernama stop_event.
  4. Kita membuat dan menjalankan sebuah thread, memberikan stop_event kepadanya.
  5. Kita biarkan thread berjalan selama 5 detik menggunakan time.sleep(5).
  6. Kita menetapkan event menggunakan stop_event.set(), yang memberi tanda kepada thread untuk berhenti.
  7. Kita menunggu thread selesai menggunakan thread.join().

Ketika kamu menjalankan ini, kamu akan melihat "Bekerja..." dicetak beberapa kali, lalu "Pekerja: Saya selesai!" diikuti dengan "Utama: Semua selesai!".

Penghentian Thread menggunakan Flag

Cara lain untuk menghentikan sebuah thread adalah dengan menggunakan sebuah boolean flag sederhana. Metode ini sedikit lebih manual tetapi dapat sangat efektif.

Berikut adalah contoh:

import threading
import time

def menghitung_sheep(stop_flag):
count = 0
while not stop_flag[0]:
count += 1
print(f"Hitung domba: {count}")
time.sleep(1)
print(f"Saya menghitung {count} domba sebelum tidur!")

# Membuat objek yang dapat diubah untuk menahan flag kita
stop_flag = [False]

# Membuat dan menjalankan thread
thread = threading.Thread(target=menghitung_sheep, args=(stop_flag,))
thread.start()

# Biarkan thread menghitung domba selama 5 detik
time.sleep(5)

# Menetapkan flag ke True untuk menghentikan thread
stop_flag[0] = True

# Menunggu thread selesai
thread.join()

print("Utama: Selamat malam!")

Mari kita analisis kode ini:

  1. Kita mendefinisikan fungsi menghitung_sheep yang menghitung sampai stop_flag diatur ke True.
  2. Kita membuat daftar stop_flag dengan satu elemen boolean. Kita menggunakan daftar karena itu dapat diubah, memungkinkan kita untuk memodifikasinya dari luar thread.
  3. Kita membuat dan menjalankan sebuah thread, memberikan stop_flag kepadanya.
  4. Kita biarkan thread menghitung domba selama 5 detik.
  5. Kita menetapkan stop_flag[0] ke True, memberi tanda kepada thread untuk berhenti.
  6. Kita menunggu thread selesai menggunakan thread.join().

Ketika kamu menjalankan ini, kamu akan melihat jumlah domba meningkat selama tentang 5 detik, lalu jumlah akhir, diikuti dengan "Utama: Selamat malam!".

Perbandingan Metode

Mari kita bandingkan kedua metode ini:

Metode Keunggulan Kekurangan
Objek Event - Sinkronisasi bawaan
- Jelas dan pythonic
- Memerlukan passing objek event
Flag - Mudah untuk mengimplementasikan
- Tidak memerlukan objek tambahan
- Sinkronisasi manual
- Potensi untuk kondisi lomba

Kesimpulan

Selamat! Kamu baru saja mempelajari dua cara untuk menghentikan thread di Python. Metode Objek Event secara umum lebih disukai karena sinkronisasi bawaannya, tetapi metode flag dapat berguna dalam skenario yang lebih sederhana.

Ingat, seperti memutuskan panggilan telepon dengan sopan, itu penting untuk memberikan thread kamu kesempatan untuk membersihkan sebelum mereka berhenti. Dalam aplikasi dunia nyata, kamu mungkin ingin menambahkan beberapa kode pembersihan di fungsi thread kamu yang dijalankan saat tanda stop diterima.

Pemrograman adalah tentang praktek, jadi saya mendorong kamu untuk bereksperimen dengan contoh ini. Cobalah untuk mengubah mereka, mungkin dengan menambahkan beberapa thread atau mengubah waktu. Siapa tahu? Kamu mungkin membuat permainan yang menyenangkan "hentikan penghitung domba"!

Selamat coding, dan semoga thread kamu selalu bekerja sama!

Credits: Image by storyset