Python - Penjadwalan Thread

Halo semua, masa depan maestros Python! Hari ini, kita akan memasuki dunia yang menarik tentang penjadwalan thread di Python. Jangan khawatir jika Anda baru mengenal pemrograman; saya akan memandu Anda melalui perjalanan ini langkah demi langkah, seperti yang saya lakukan untuk banyak mahasiswa selama tahun tahun mengajar saya. Mari kita mulai petualangan yang menarik ini bersama!

Python - Thread Scheduling

Mengerti Threads

Sebelum kita melompat ke penjadwalan, mari kita singkatkan apa itu threads. Bayangkan Anda membaca sebuah buku sambil mendengarkan musik. Otak Anda secara efektif menjalankan dua "thread" secara bersamaan - satu untuk membaca dan satu untuk mendengarkan. Dalam pemrograman, threads bekerja secara serupa, memungkinkan sebuah program untuk melakukan banyak tugas secara bersamaan.

Penjadwalan Threads menggunakan Kelas Timer

Sekarang, mari kita eksplorasi metode pertama penjadwalan threads: kelas Timer. Ini seperti mengatur alarm untuk kode Anda!

Apa itu Kelas Timer?

Kelas Timer adalah bagian dari modul threading di Python. Ini memungkinkan Anda untuk menjadwalkan sebuah fungsi untuk dijalankan setelah jeda yang ditentukan. Pernahkah Anda mengatakan kepada Python, "Hai, jalankan tugas ini untuk saya, tapi tunggu sebentar sebelum Anda memulainya!"

Cara Menggunakan Kelas Timer

Mari kita lihat contoh sederhana:

import threading
import time

def sapa(nama):
print(f"Halo, {nama}! Waktu saat ini adalah {time.strftime('%H:%M:%S')}")

# Membuat objek Timer
t = threading.Timer(5, sapa, args=["Alice"])

# Memulai timer
t.start()

print("Timer dimulai!")

# Menunggu timer selesai
t.join()

print("Timer selesai!")

Mari kita pecahkan ini:

  1. Kita mengimpor modul yang diperlukan: threading dan time.
  2. Kita mendefinisikan fungsi sapa sederhana yang mencetak ucapan dengan waktu saat ini.
  3. Kita membuat objek Timer, memberitahu itu untuk menjalankan fungsi sapa setelah jeda 5 detik, melewatkan "Alice" sebagai argumen.
  4. Kita memulai timer dengan t.start().
  5. Kita menggunakan t.join() untuk menunggu timer selesai sebelum melanjutkan.

Ketika Anda menjalankan ini, Anda akan melihat "Timer dimulai!" dicetak segera, kemudian setelah jeda 5 detik, Anda akan melihat ucapan, diikuti dengan "Timer selesai!".

Membatalkan Timer

Terkadang, Anda mungkin perlu membatalkan tugas yang dijadwalkan. Ini seperti memutuskan Anda tidak perlu alarm tersebut. Ini caranya:

import threading
import time

def tugas():
print("Tugas ini tidak akan dijalankan!")

t = threading.Timer(5, tugas)
t.start()

print("Timer dimulai, tapi kita akan membatalkannya...")
time.sleep(2)  # Tunggu selama 2 detik
t.cancel()  # Batalkan timer
print("Timer dibatalkan!")

Dalam contoh ini, kita menjadwalkan sebuah tugas tapi kemudian membatalkannya sebelum itu memiliki kesempatan untuk dijalankan.

Penjadwalan Threads menggunakan Modul sched

Sekarang, mari kita naik level dan lihat modul sched. Jika kelas Timer seperti alarm pribadi sederhana, modul sched seperti aplikasi penjadwalan yang lengkap!

Apa itu Modul sched?

Modul sched memungkinkan Anda untuk menjadwalkan banyak kejadian untuk terjadi pada waktu tertentu. Ini sempurna untuk saat Anda memerlukan penjadwalan yang lebih kompleks daripada jeda sederhana.

Cara Menggunakan Modul sched

Mari kita lihat contoh:

import sched
import time

# Membuat objek scheduler
s = sched.scheduler(time.time, time.sleep)

def print_time(nama):
print(f"Halo, {nama}! Waktu saat ini adalah {time.strftime('%H:%M:%S')}")

# Menjadwalkan beberapa kejadian
s.enter(2, 1, print_time, argument=("Alice",))
s.enter(4, 2, print_time, argument=("Bob",))
s.enter(6, 3, print_time, argument=("Charlie",))

print("Scheduler dimulai!")
s.run()
print("Scheduler selesai!")

Mari kita pecahkan ini:

  1. Kita membuat objek scheduler menggunakan sched.scheduler().
  2. Kita mendefinisikan fungsi print_time sederhana.
  3. Kita menjadwalkan tiga kejadian menggunakan s.enter():
  • Argumen pertama adalah jeda dalam detik.
  • Argumen kedua adalah prioritas (angka lebih rendah = prioritas lebih tinggi).
  • Argumen ketiga adalah fungsi untuk dijalankan.
  • Kata kunci argument memungkinkan kita untuk melewatkan argumen ke fungsi.
  1. Kita memulai scheduler dengan s.run().

Ketika Anda menjalankan ini, Anda akan melihat ucapan dicetak pada interval 2 detik.

Membatalkan Kejadian yang Dijadwalkan

Sama seperti dengan Timer, Anda dapat membatalkan kejadian yang dijadwalkan di sched:

import sched
import time

s = sched.scheduler(time.time, time.sleep)

def tugas(nama):
print(f"Halo, {nama}!")

event1 = s.enter(2, 1, tugas, argument=("Alice",))
event2 = s.enter(4, 1, tugas, argument=("Bob",))

print("Kejadian dijadwalkan. Membatalkan kejadian Bob...")
s.cancel(event2)

s.run()
print("Scheduler selesai!")

Dalam contoh ini, kita menjadwalkan dua kejadian tapi membatalkan yang kedua sebelum menjalankan scheduler.

Perbandingan Timer dan sched

Berikut adalah perbandingan cepat antara dua metode yang kita pelajari:

Fitur Timer sched
Kemudahan penggunaan Sederhana, langsung Lebih kompleks, tapi lebih kuat
Beberapa kejadian Satu pada satu waktu Dapat menjadwalkan banyak kejadian
Presisi Kurang presisi Lebih presisi
Pembatalan Dapat membatalkan sebelum eksekusi Dapat membatalkan kapan saja
kasus penggunaan Jeda sederhana Kebutuhan penjadwalan kompleks

Kesimpulan

Dan itu untuk saat ini, teman-teman! Kita telah melakukan perjalanan melalui dunia penjadwalan thread di Python, dari kelas Timer yang sederhana ke modul sched yang lebih kompleks. Ingat, seperti belajar untuk bersepeda, menguasai konsep ini memerlukan praktek. Jadi jangan takut untuk bereksperimen dan membuat kesalahan - itulah cara kita belajar!

Selama tahun tahun mengajar, saya telah melihat mahasiswa yang beralih dari pemula menjadi ahli Python, dan saya tidak punya keraguan bahwa Anda dapat melakukan hal yang sama. Tetap kode, terus belajar, dan yang paling penting, bersenang-senanglah dengan itu!

Sampai jumpa lagi, happy coding!

Credits: Image by storyset