Python - Penjadualan Thread

Halo kepada semua, pakar Python masa depan! Hari ini, kita akan menyelam ke atas dunia yang menarik tentang penjadualan thread di Python. Jangan khawatir jika anda baru mengenali pemrograman; saya akan membimbing anda melalui perjalanan ini langkah demi langkah, sama seperti yang saya lakukan untuk pelbagai pelajar selama tahun tahun pengajaran saya. Mari kita mulakan pengalaman yang menarik ini bersama-sama!

Python - Thread Scheduling

Mengenali Thread

Sebelum kita melompat ke penjadualan, mari kita secara cepat mengingatkan diri tentang apa itu thread. Bayangkan anda membaca sebuah buku sambil mendengarkan musik. Otak anda secara essensial menjalankan dua "thread" secara serentak - satu untuk membaca dan satu lagi untuk mendengarkan. Dalam pemrograman, thread bekerja secara serupa, membenarkan sebuah program untuk melakukan pelbagai tugas secara serentak.

Penjadualan Thread menggunakan Klassen Timer

Sekarang, mari kita eksplorasi metode pertama penjadualan thread: kelas Timer. Ia seperti mengatur rakaman untuk kod anda!

Apa itu Kelas Timer?

Kelas Timer adalah sebahagian dari modul threading di Python. Ia membenarkan anda untuk menjadualkan fungsi untuk dijalankan setelah masa tunda yang dinyatakan. Bayangkan seperti anda memberitahu Python, "Hey, jalankan tugas ini untuk saya, tapi tunggu sebentar sebelum anda mula!"

Cara Menggunakan Kelas Timer

Mari kita lihat contoh yang simple:

import threading
import time

def greet(name):
print(f"Halo, {name}! Masa sekarang adalah {time.strftime('%H:%M:%S')}")

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

# Memulakan pemasa
t.start()

print("Pemasa dimulakan!")

# Menunggu pemasa untuk selesai
t.join()

print("Pemasa selesai!")

Mari kita kongsi penyusunan ini:

  1. Kita import modul yang diperlukan: threading dan time.
  2. Kita define fungsi greet yang simple untuk mencetak ucapan dengan masa sekarang.
  3. Kita membuat objek Timer, memberitahu ia untuk menjalankan fungsi greet setelah tunda 5 saat, melepaskan "Alice" sebagai argumen.
  4. Kita mulakan pemasa dengan t.start().
  5. Kita gunakan t.join() untuk menunggu pemasa untuk selesai sebelum melanjutkan.

Apabila anda menjalankan ini, anda akan lihat "Pemasa dimulakan!" dicetak segera, kemudian setelah tunda 5 saat, anda akan lihat ucapan, diikuti dengan "Pemasa selesai!".

Pembatalan Pemasa

Bila-bila masa, anda mungkin perlu untuk membatalkan tugas yang dijadualkan. Ia seperti memutuskan anda tidak perlu rakaman itu. Ini cara caranya:

import threading
import time

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

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

print("Pemasa dimulakan, tetapi kita akan membatalkannya...")
time.sleep(2)  # Tunggu untuk 2 saat
t.cancel()  # Batalkan pemasa
print("Pemasa dibatalkan!")

Dalam contoh ini, kita menjadualkan tugas tetapi kemudian membatalkannya sebelum ia menjalankan.

Penjadualan Thread menggunakan Modul sched

Sekarang, mari kita naik taraf dan lihat modul sched. Jika kelas Timer adalah seperti rakaman pukul simple, modul sched adalah seperti aplikasi penjadualan yang berkelas!

Apa itu Modul sched?

Modul sched membenarkan anda untuk menjadualkan pelbagai acara untuk berlaku pada masa yang dinyatakan. Ia adalah sempurna untuk saat anda memerlukan penjadualan yang lebih kompleks daripada tunda yang simple.

Cara Menggunakan Modul sched

Mari kita lihat contoh:

import sched
import time

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

def print_time(name):
print(f"Halo, {name}! Masa sekarang adalah {time.strftime('%H:%M:%S')}")

# Menjadualkan beberapa acara
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("Penjadual dimulakan!")
s.run()
print("Penjadual selesai!")

Mari kita kongsi penyusunan ini:

  1. Kita membuat objek penjadual menggunakan sched.scheduler().
  2. Kita define fungsi print_time yang simple.
  3. Kita menjadualkan tiga acara menggunakan s.enter():
  • Argumen pertama adalah tunda dalam saat.
  • Kedua adalah prioriti (nombor yang lebih rendah = prioriti yang lebih tinggi).
  • Ketiga adalah fungsi untuk dijalankan.
  • Kata kunci argument membenarkan kita untuk melepaskan argumen kepada fungsi.
  1. Kita mulakan penjadual dengan s.run().

Apabila anda menjalankan ini, anda akan lihat ucapan dicetak setiap 2 saat.

Pembatalan Acara yang Dijadualkan

Sama seperti dengan Timer, anda boleh membatalkan acara yang dijadualkan di sched:

import sched
import time

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

def task(name):
print(f"Halo, {name}!")

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

print("Acara dijadualkan. Membatalkan acara Bob...")
s.cancel(event2)

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

Dalam contoh ini, kita menjadualkan dua acara tetapi membatalkan yang kedua sebelum menjalankan penjadual.

Perbandingan Timer dan sched

Berikut adalah perbandingan cepat antara dua metode yang kita telah pelajari:

Ciri Timer sched
Kemudahan penggunaan Simple, jelas Lebih kompleks, tetapi lebih kuat
Pelbagai acara Satu pada satu masa Boleh menjadualkan pelbagai acara
Keterampilan Kurang keterampilan Lebih keterampilan
Pembatalan Boleh dibatalkan sebelum pelaksanaan Boleh dibatalkan pada bila-bila masa
Kegunaan kasus Tunda simple Kebutuhan penjadualan kompleks

Penutup

Dan itu tadi, semua! Kita telah menjelajahi dunia penjadualan thread di Python, dari kelas Timer yang simple ke modul sched yang lebih kompleks. Ingat, seperti untuk belajar untuk mengendarai rakit, menguasai konsep ini memerlukan latihan. Jadi, jangan takut untuk untuk bereksperimen dan membuat kesilapan - itulah cara kita belajar!

Selama tahun tahun pengajaran saya, saya telah melihat pelajar yang beralih dari pemula kepada pakar Python, dan saya tidak ragu bahawa anda boleh melakukan yang sama. Teruskan untuk mengkod, teruskan untuk belajar, dan yang paling penting, bersenang-senanglah dengan itu!

Sampai jumpa lagi, happy coding!

Credits: Image by storyset