I-master ang Python sleep(): gamit, katumpakan, alternatibo

1. sleep() na function: mga batayan at paraan ng paggamit

1.1 sleep() na function: ano ito

python sleep na function ay isang function na kabilang sa time na module ng Python, at ginagamit upang pansamantalang ihinto ang pagpapatakbo ng programa. Isinusulat bilang time.sleep(seconds), at ang halagang ipinapasa bilang argumento ang tumutukoy sa tagal ng paghinto ng programa.

1.2 Pangunahing paggamit

Ang pangunahing paggamit ng sleep() na function ay napakasimple. Sa sumusunod na code, hihinto ang programa sa loob ng 1 segundo, at ang susunod na linya ay isasagawa makalipas ang 1 segundo.
import time

print("Simula")
time.sleep(1)
print("Lumipas ang 1 segundo")

2. Mga halimbawa ng paggamit ng sleep() na function

2.1 Pagsasagawa ng regular na pagproseso

Ang python sleep na function ay kapaki-pakinabang kapag nais mong magsagawa ng pagproseso sa nakatakdang pagitan. Halimbawa, kung uulitin ang loop bawat 1 segundo, maaari mo itong isulat tulad ng nasa ibaba.
import time

for i in range(5):
    print(f"Lumipas ang {i} segundo")
    time.sleep(1)
Sa halimbawang ito, tumatakbo ang bawat loop kada 1 segundo, at dahil sa sleep() nagaganap ang pagproseso sa pagitan ng tig-1 segundo.

2.2 Pag-umpisa ng pagproseso sa tinukoy na oras

Kung nais mong simulan ang pagproseso sa isang partikular na oras, maaari mong gamitin ang sleep() upang maghintay mula sa kasalukuyang oras hanggang sa tinukoy na oras.
import time
from datetime import datetime

target_time = datetime.strptime("2024/09/19 21:30", '%Y/%m/%d %H:%M')
wait_time = (target_time - datetime.now()).seconds

print("Naghihintay hanggang magsimula ang pagproseso")
time.sleep(wait_time)
print("Sinisimulan ang pagproseso sa tinukoy na oras")
Sa code na ito, maghihintay hanggang 2024/09/19 21:30, at kapag dumating ang oras na iyon, isasagawa ang pagproseso.

2.3 Paglalapat sa lohika ng muling pagtatangka

Para sa komunikasyon sa network o mga API request, kung kinakailangang muling sumubok kapag nagkaroon ng error, maaari mong gamitin ang sleep() upang maghintay ng takdang oras at magtakda ng pagitan sa pagitan ng mga muling pagtatangka.
import time
import requests

url = "https://example.com/api"
retries = 3

for attempt in range(retries):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            print("Tagumpay")
            break
    except requests.exceptions.RequestException:
        print(f"Ika-{attempt + 1} muling pagtatangka")
        time.sleep(2)
Sa halimbawang ito, kapag nabigo ang kahilingan, muling susubok kada 2 segundo.

3. Ang katangiang pagba-block ng function na sleep() at ang mga epekto nito

3.1 Ang sleep() bilang isang blocking function

python sleep na function ay isang blocking function at, habang tumatakbo, pinatitigil nito ang iba pang mga gawain ng thread na iyon. Sa single-threaded na mga programa, wala itong problema, ngunit sa multi-threaded na mga programa, maaari nitong hadlangan ang pagpapatakbo ng ibang mga thread。

3.2 Mga dapat isaalang-alang sa multi-threaded na kapaligiran

Kapag gumamit ka ng sleep() sa isang multi-threaded na kapaligiran, kailangang mag-ingat dahil maaari nitong maapektuhan ang performance ng ibang mga thread. Halimbawa, kung gusto mong i-delay ang isang partikular na thread lang, gamitin ang sleep() doon lamang sa thread na iyon upang hindi maapektuhan ang iba pang mga thread。

4. sleep() na function: katumpakan at mga limitasyon

4.1 Mga problema sa katumpakan

Sa python sleep na function, ang katumpakan ay nakadepende sa timer ng OS, kaya kailangang mag-ingat kapag kailangan ang katumpakan sa antas ng milisegundo. Sa karaniwang kapaligiran, kahit tukuyin mo ito gaya ng time.sleep(0.001), maaaring hindi ito talagang hihinto nang may ganoong katumpakan.

4.2 Mga alternatibong paraan para mapahusay ang katumpakan

Kung kinakailangan ang mataas na katumpakan para sa mga partikular na gawain, maaari kang gumamit ng mga tulad ng signal na module upang makamit ang mas eksaktong kontrol sa timing.
import signal
import time

signal.setitimer(signal.ITIMER_REAL, 0.1, 0.1)

for i in range(3):
    time.sleep(1)
    print(i)
Sa code na ito, ginagamit ang signal na module upang mapahusay ang katumpakan ng time.sleep().

5. sleep() na function: Mga pinakamahusay na gawi

5.1 Ang tamang paggamit

sleep() na function ay kapaki-pakinabang, ngunit kung aabusuhin, maaari itong magdulot ng pagbaba ng pagganap o hindi inaasahang pag-uugali ng programa. Kapag naghihintay sa pag-load ng pahina sa web scraping o awtomatikong pagsubok, mahalagang isaalang-alang na huwag gumamit ng sleep(); sa halip, tiyakin muna ang pag-iral ng isang partikular na elemento bago magpatuloy sa susunod na hakbang.

5.2 Paghawak ng mga eksepsiyon

Maaaring magkaroon ng hindi inaasahang eksepsiyon habang nasa sleep() na function, kaya inirerekomendang gumamit ng try at except para sa paghawak ng eksepsiyon. Sa ganitong paraan, maiiwasan na maputol ang programa sa kalagitnaan.

6. Mga alternatibo sa sleep() function at mga dapat isaalang-alang

6.1 Paggamit ng event-driven programming

Ang sleep() function ay angkop para sa simpleng pagkaantala, ngunit kapag kailangan ang mas kumplikadong kontrol sa timing, inirerekomendang gumamit ng mga pamamaraang event-driven sa programming. Halimbawa, sa paggamit ng asyncio modyul para sa asynchronous na pagproseso, makakagawa ka ng mas episyenteng programa。

6.2 Pamamahala ng oras sa asynchronous na pagproseso

Sa asynchronous na pagproseso, maaari mong gamitin ang asyncio.sleep() upang maghintay nang asynchronous. Dahil dito, naisasagawa ang ibang mga gawain habang naghihintay, kaya tumataas ang kabuuang episyensya ng programa。
import asyncio

async def example():
    print("Simula")
    await asyncio.sleep(1)
    print("Makalipas ang 1 segundo")

asyncio.run(example())
Sa halimbawang ito, isinasagawa nang asynchronous ang 1 segundong pagkaantala gamit ang asyncio.sleep()

7. Mga dapat tandaan at buod sa paggamit ng sleep() na function

Ang python sleep na function ay isang kapaki-pakinabang na kasangkapan para kontrolin ang timing ng programa, ngunit mahalagang maunawaan ang blocking na katangian nito at ang mga limitasyon sa katumpakan, at gamitin ito sa angkop na mga sitwasyon. Lalo na kapag ginagamit sa multithreaded na kapaligiran o sa mga larangang nangangailangan ng real-time na pagganap, kinakailangang isaalang-alang ang mga alternatibo o mga pamamaraang pampuno.

7.1 Buod

  • Ang sleep() na function ay ginagamit upang pansamantalang ihinto ang pagpapatakbo ng programa.
  • Bagama’t kapaki-pakinabang, ito ay isang blocking na function kaya maaaring hadlangan nito ang pagpapatakbo ng ibang mga thread.
  • Dahil may mga limitasyon ang katumpakan nito, mahalagang isaalang-alang, kung kinakailangan, ang mga alternatibong paraan tulad ng signal module at asynchronous na pagproseso.
  • Sa pamamagitan ng wastong paghawak ng exception at pagsunod sa mga best practice, makakagawa ng mas matatag na programa.
年収訴求