Python Sleep Function: วิธีเพิ่มความล่าช้าในโค้ด
เผยแพร่แล้ว: 2022-12-01บทช่วยสอนนี้จะสอนวิธีใช้ฟังก์ชัน sleep() จากโมดูลเวลาในตัวของ Python เพื่อเพิ่มการหน่วงเวลาให้กับโค้ด
เมื่อคุณเรียกใช้โปรแกรม Python อย่างง่าย การดำเนินการโค้ดจะเกิดขึ้น ตามลำดับ — หนึ่งคำสั่งหลังจากนั้นอีกคำสั่งหนึ่ง — โดยไม่มี การหน่วงเวลา อย่างไรก็ตาม คุณอาจต้องชะลอการดำเนินการโค้ดในบางกรณี ฟังก์ชัน sleep()
จากโมดูลเวลาในตัวของ Python ช่วยให้คุณทำสิ่งนี้ได้
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้ไวยากรณ์ของการใช้ฟังก์ชัน sleep()
ใน Python และตัวอย่างต่างๆ เพื่อทำความเข้าใจวิธีการทำงาน มาเริ่มกันเลย!
ไวยากรณ์ของ Python time.sleep()
โมดูล time
ที่สร้างขึ้นในไลบรารีมาตรฐานของ Python มีฟังก์ชันที่เกี่ยวข้องกับเวลาที่มีประโยชน์หลายอย่าง ในขั้นตอนแรก ให้นำเข้าโมดูล time
ในสภาพแวดล้อมการทำงานของคุณ:
import time
เนื่องจากฟังก์ชัน sleep()
เป็นส่วนหนึ่งของโมดูล time
ตอนนี้คุณจึงสามารถเข้าถึงและใช้งานด้วยไวยากรณ์ทั่วไปต่อไปนี้:
time.sleep(n)
โดยที่ n
คือจำนวน วินาที ที่จะหลับ อาจเป็นจำนวนเต็มหรือเลขทศนิยมก็ได้
บางครั้งการหน่วงเวลาที่กำหนดอาจเป็นไม่กี่มิลลิวินาที ในกรณีเหล่านี้ คุณสามารถแปลงระยะเวลาเป็นมิลลิวินาทีเป็นวินาที และใช้ในการเรียกใช้ฟังก์ชันสลีป ตัวอย่างเช่น ถ้าคุณต้องการแนะนำการหน่วงเวลา 100 มิลลิวินาที คุณสามารถระบุเป็น 0.1 วินาที: time.sleep(0.1)
คุณยังสามารถนำเข้าเฉพาะฟังก์ชันส sleep
ปจากโมดูล time
:
from time import sleep
หากคุณใช้วิธีการนำเข้าข้างต้น คุณสามารถเรียกใช้ฟังก์ชัน sleep()
ได้โดยตรงโดยไม่ต้องใช้ time.sleep()
ตอนนี้คุณได้เรียนรู้ไวยากรณ์ของฟังก์ชัน Python sleep()
แล้ว เรามาโค้ดตัวอย่างเพื่อดูการทำงานของฟังก์ชัน คุณสามารถดาวน์โหลดสคริปต์ Python ที่ใช้ในบทช่วยสอนนี้ได้จากโฟลเดอร์ python-sleep ใน repo GitHub นี้
การดำเนินการโค้ดล่าช้าด้วยโหมดสลีป ()
ตัวอย่างแรก ลองใช้ฟังก์ชัน sleep เพื่อหน่วงเวลาการทำงานของโปรแกรม Python อย่างง่าย

ในข้อมูลโค้ดต่อไปนี้:
- คำสั่ง first
print()
ถูกดำเนินการโดยไม่ชักช้า - จากนั้นเราจะแนะนำการหน่วงเวลา 5 วินาทีโดยใช้ฟังก์ชัน
sleep()
- คำสั่ง
print()
ที่สองจะถูกดำเนินการหลังจากการดำเนินการพักเครื่องเสร็จสิ้นเท่านั้น
# /python-sleep/simple_example.py import time print("Print now") time.sleep(5) print("Print after sleeping for 5 seconds")
ตอนนี้เรียกใช้ไฟล์ simple_example.py
และสังเกตผลลัพธ์:
$ python3 simple_example.py
เพิ่มความล่าช้าต่างๆ ให้กับ Code Block
ในตัวอย่างก่อนหน้านี้ เราแนะนำการหน่วงเวลาคงที่ 5 วินาทีระหว่างการดำเนินการของคำสั่ง print()
สองคำสั่ง ต่อไป เรามาเขียนโค้ดอีกตัวอย่างหนึ่งเพื่อแนะนำเวลาหน่วงที่แตกต่างกันเมื่อวนซ้ำผ่าน iterable
ในตัวอย่างนี้ เราต้องการดำเนินการดังต่อไปนี้:
- วนซ้ำประโยค เข้าถึงแต่ละคำ และพิมพ์ออกมา
- หลังจากพิมพ์แต่ละคำออกมาแล้ว เราต้องการรอเป็นระยะเวลาหนึ่งก่อนที่จะพิมพ์คำถัดไปในประโยค
การวนซ้ำผ่านสายของสตริง
พิจารณาสตริง sentence
เป็นสตริงที่แต่ละคำเป็นสตริงในตัวเอง
ถ้าเราวนลูปเราจะได้ตัวอักษรแต่ละตัวดังรูป
>>> sentence = "How long will this take?" >>> for char in sentence: ... print(char) # Output (truncated for readability) H o w . . . t a k e ?
แต่นี่ไม่ใช่สิ่งที่เราต้องการ เราต้องการวนซ้ำประโยคและเข้าถึงแต่ละคำ ในการทำเช่นนี้ เราสามารถเรียกใช้เมธอด split()
บนสตริง sentence
การดำเนินการนี้จะส่งคืนรายการสตริงที่ได้รับจากการแยกสตริง sentence
บนช่องว่างที่เกิดขึ้น ทั้งหมด
>>> sentence.split() ['How', 'long', 'will', 'this', 'take?'] >>> for word in sentence.split(): ... print(word) # Output How long will this take?
การวนซ้ำผ่าน Iterables ด้วยความล่าช้าที่แตกต่างกัน
มาดูตัวอย่างกันอีกครั้ง:
-
sentence
คือสตริงที่เราต้องการวนซ้ำเพื่อเข้าถึงแต่ละคำ -
delay_times
คือรายการของเวลาหน่วงที่เราจะใช้เป็นอาร์กิวเมนต์ของฟังก์ชันsleep()
ระหว่างการผ่านลูปแต่ละครั้ง
ที่นี่เราต้องการวนซ้ำสองรายการพร้อมกัน: รายการ delay_times
และรายการสตริงที่ได้จากการแยกสตริง sentence
คุณสามารถใช้ฟังก์ชัน zip()
เพื่อทำการวนซ้ำแบบขนานนี้
Python zip() ฟังก์ชัน : zip(list1, list2) ส่งคืนตัววนซ้ำของทูเพิล โดยที่แต่ละทูเพิลมีรายการที่ดัชนี i ใน list1 และ list2
# /python-sleep/delay_times.py import time sleep_times = [3,4,1.5,2,0.75] sentence = "How long will this take?" for sleep_time,word in zip(sleep_times,sentence.split()): print(word) time.sleep(sleep_time)
หากไม่มีฟังก์ชันสลีป ตัวควบคุมจะดำเนินการวนซ้ำถัดไปทันที เนื่องจากเราได้แนะนำการหน่วงเวลา การผ่านลูปครั้งต่อไปจะเกิดขึ้นหลังจากการดำเนินการสลีปเสร็จสิ้นเท่านั้น
ตอนนี้เรียกใช้ delay_times.py
และสังเกตผลลัพธ์:
$ python3 delay_times.py
คำที่ตามมาในสตริงจะถูกพิมพ์ออกมาหลังจากการหน่วงเวลา การหน่วงเวลาหลังจากพิมพ์คำที่ดัชนี i
ในสตริงคือตัวเลขที่ดัชนี i
ในรายการ delay_times
ตัวจับเวลาถอยหลังใน Python
จากตัวอย่างต่อไป ให้เราเขียนโค้ดตัวนับเวลาถอยหลังอย่างง่ายใน Python


มากำหนดฟังก์ชั่น countDown()
:
# /python-sleep/countdown.py import time def countDown(n): for i in range(n,-1,-1): if i==0: print("Ready to go!") else: print(i) time.sleep(1)
ต่อไป เรามาแยกคำนิยามของ countDown()
กัน:
- ฟังก์ชันรับจำนวน
n
เป็นอาร์กิวเมนต์และนับถอยหลังจนถึงศูนย์โดยเริ่มจากจำนวนนั้นn
- เราใช้ time.sleep(1) เพื่อให้เกิดความล่าช้า 1 วินาทีระหว่างการนับ
- เมื่อนับถึง 0 ฟังก์ชันจะพิมพ์ข้อความว่า “พร้อมลุย!”
เพื่อให้ได้การดำเนินการนับถอยหลัง เราได้ใช้ฟังก์ชัน
range()
ที่มีค่าขั้นลบเป็น -1range(n, -1, -1)
จะช่วยให้เราวนซ้ำช่วงของตัวเลขใน n, n – 1, n – 2 ไปเรื่อยๆ จนถึงศูนย์ จำได้ว่าจุดสิ้นสุดถูกแยกออกตามค่าเริ่มต้นเมื่อใช้ฟังก์ชันrange()
ต่อไปเราจะเพิ่มการเรียกไปยัง countDown()
โดยมี 5 เป็นอาร์กิวเมนต์
countDown(5)
ตอนนี้เรียกใช้สคริปต์ countdown.py
และดูการทำงานของฟังก์ชั่น countDown
!
$ python3 countdown.py
ฟังก์ชั่นสลีปในมัลติเธรด
Python threading module นำเสนอความสามารถในการทำงานแบบมัลติเธรดที่นอกกรอบ ใน Python นั้น Global Interpreter Lock หรือ GIL ช่วยให้มั่นใจได้ว่ามีเธรดที่ใช้งานอยู่เพียงเธรดเดียวที่รัน ณ เวลาใดเวลาหนึ่ง

อย่างไรก็ตาม ในระหว่างการดำเนินการ I/O และการดำเนินการรอเช่นโหมดสลีป โปรเซสเซอร์สามารถระงับการดำเนินการของเธรดปัจจุบันและสลับไปยังเธรดอื่นที่กำลังรออยู่
เพื่อให้เข้าใจถึงวิธีการทำงาน ลองมาดูตัวอย่างกัน
การสร้างและเรียกใช้เธรดใน Python
พิจารณาฟังก์ชันต่อไปนี้ func1()
, func2()
และ func3()
พวกเขาวนซ้ำช่วงของตัวเลขและพิมพ์ออกมา ตามมาด้วยการทำงานแบบสลีปตามจำนวนวินาทีที่กำหนด ระหว่างการผ่านลูปทุกครั้ง เราได้ใช้เวลาหน่วงที่แตกต่างกันสำหรับแต่ละฟังก์ชันเพื่อให้เข้าใจได้ดีขึ้นว่าการดำเนินการสลับไปมาระหว่างเธรดพร้อมกันอย่างไร
import time def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5)
ใน Python คุณสามารถใช้ตัวสร้าง Thread()
เพื่อสร้างอินสแตนซ์ของเธรดอ็อบเจ็กต์ การใช้ threading.Thread(target = …, args = …)
สร้างเธรดที่เรียกใช้ฟังก์ชัน target
ด้วยอาร์กิวเมนต์ที่ระบุใน tuple ของ args
ในตัวอย่างนี้ ฟังก์ชัน func1
, func2
และ func3
จะไม่รับอาร์กิวเมนต์ใดๆ ดังนั้นการระบุเพียงชื่อของฟังก์ชันเป็นเป้าหมายก็เพียงพอแล้ว จากนั้นเรากำหนด thread object, t1
, t2
และ t3
โดยมี func1
, func2
และ func3
เป็นเป้าหมายตามลำดับ
t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
นี่คือรหัสที่สมบูรณ์สำหรับตัวอย่างเธรด:
# /python-sleep/threads.py import time import threading def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5) t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
สังเกตผลลัพธ์ การดำเนินการเปลี่ยนแปลงระหว่างสามเธรด เธรด t3
มีเวลารอน้อยที่สุด ดังนั้นเธรดจึงถูกระงับโดยใช้เวลาน้อยที่สุด เธรด t1
มีระยะเวลาสลีปนานที่สุดคือสองวินาที ดังนั้นจึงเป็นเธรดสุดท้ายที่จะเสร็จสิ้นการดำเนินการ
หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านบทช่วยสอนเกี่ยวกับพื้นฐานของมัลติเธรดใน Python
บทสรุป
ในบทช่วยสอนนี้ คุณได้เรียนรู้วิธีใช้ฟังก์ชัน sleep()
ของ Python เพื่อเพิ่มการหน่วงเวลาให้กับโค้ด
คุณสามารถเข้าถึงฟังก์ชัน sleep()
ได้จากโมดูลเวลาในตัว time.sleep()
หากต้องการชะลอการดำเนินการ n วินาที ให้ใช้ time.sleep(n)
นอกจากนี้ คุณยังได้เห็นตัวอย่างการหน่วงเวลาการวนซ้ำที่ตามมาในลูปด้วยค่าต่างๆ การนับถอยหลัง และมัลติเธรด
ตอนนี้คุณสามารถสำรวจความสามารถขั้นสูงเพิ่มเติมของโมดูลเวลาได้แล้ว ต้องการทำงานกับวันที่และเวลาใน Python หรือไม่ นอกจากโมดูลเวลาแล้ว คุณยังสามารถใช้ประโยชน์จากฟังก์ชันของโมดูลวันที่และเวลาและปฏิทินได้อีกด้วย
ต่อไป เรียนรู้การคำนวณความแตกต่างของเวลาใน Python