บทความนี้ผมจะขอแนะนำ 2 วิธี ดังนี้
- ใช้ไลบรารี sched ของ python
- ใช้โมดูล schedule
ไลบรารี sched ใน Python
ไลบรารีมาตรฐานตัวหนึ่งของ Python สำหรับใช้ทำ scheduler นั้นคือ ไลบรารี sched
ไลบรารี sched เป็นไลบรารีสำหรับทำ scheduler ใน Python 2 , Python 3
มีคำสั่งดังนี้
- คำสั่งสร้าง Scheduler Objects
sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)
เป็นการกำหนดอินเตอร์เฟซสำหรับ scheduling events โดย timefunc คือ เวลา ค่าเริ่มต้น คือ time.time ส่วน delayfunc คือ การหน่วงเวลา โดยมีอาร์กิวเมนต์ 0 หลังจากที่ event แต่ละ event ทำงานเพื่อให้มีโอกาสที่เทรดอื่นจะทำงานในการใช้งานแบบมัลติเธรดในโปรแกรม - สร้าง event ใหม่ให้กับตารางเวลา
scheduler.enterabs(เวลา, ลำดับความสำคัญ, การกระทำ, argument=(), kwargs={})
- กำหนดการหน่วงเวลาในหน่วยวินาที ให้กับ event ในตารางเวลา
scheduler.enter(การหน่วงเวลา, ลำดับความสำคัญ, การกระทำ, argument=(), kwargs={})
- เอา event ออกจากคิว
scheduler.cancel(event)
- คำสั่งเช็คว่ามีคิวในตารางเวลาหรือไม่
scheduler.empty()
คำสั่งนี้จะคืนค่า True หากไม่มีคิวในตารางเวลา - รัน event ในตารางเวลาทั้งหมด
scheduler.run()
- แสดงคิวในตารางเวลา
scheduler.queue
คำสั่งนี้จะคืนค่า list ออกมา
ตัวอย่างการใช้งาน
>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
... print("From print_time", time.time(), a)
...
>>> def print_some_times():
... print(time.time())
... s.enter(10, 1, print_time)
... s.enter(5, 2, print_time, argument=('positional',))
... s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
... s.run()
... print(time.time())
...
>>> print_some_times()
930343690.257
From print_time 930343695.274 positional
From print_time 930343695.275 keyword
From print_time 930343700.273 default
930343700.276
โมดูล schedule
- เป็นโมดูลสำหรับใช้สร้าง schedule ในมุมมองของมนุษย์ และมีการใช้งานง่ายกว่าใช้ไลบรารี sched ครับ
- รองรับทั้ง Python 2 และ Python 3
- ใช้ MIT License
สามารถติดตั้งได้โดยใช้คำสั่ง pip :
pip install schedule
การใช้งาน
สามารถใช้งานได้ง่าย ๆ ตามตัวอย่างนี้ครับ
import schedule
import time
def job():
print("I'm working...")
schedule.every(10).minutes.do(job) # สร้าง every ให้ทำงานตามฟังก์ชัน job ทุก ๆ 10 นาที
schedule.every().hour.do(job) # สร้าง every ให้ทำงานตามฟังก์ชัน job ทุก ๆ ชั่วโมง
schedule.every().day.at("10:30").do(job) # สร้าง every ให้ทำงานตามฟังก์ชัน job ทุก ๆ วัน ตามเวลาที่กำหนด
schedule.every().monday.do(job) # สร้าง every ให้ทำงานตามฟังก์ชัน job ทุกวันจันทร์
schedule.every().wednesday.at("13:15").do(job) # สร้าง every ให้ทำงานตามฟังก์ชัน job ทุกวันพุธ เวลา 13:15
while True:
schedule.run_pending() # รันตารางเวลา
time.sleep(1)
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)