دالة sleep() في بايثون: إيقاف مؤقت لتنفيذ الكود مع أمثلة عملية

دقائق القراءة: 4

تُعد دالة sleep() في بايثون أداة قوية ومرنة تتيح للمطورين إدخال تأخير زمني مقصود في تنفيذ الشيفرة البرمجية. هذه الوظيفة لا غنى عنها في العديد من السيناريوهات، مثل تنظيم استدعاءات واجهات برمجة التطبيقات (API) لتجنب تجاوز حدود المعدل، أو تحسين تجربة المستخدم عن طريق إضافة فواصل زمنية مدروسة بين الكلمات أو العناصر الرسومية. في هذا المقال، سنتعمق في فهم كيفية عمل دالة sleep()، ونستعرض أمثلة عملية توضح تطبيقاتها المتنوعة.

from time import sleep
sleep(2)
print("hello world")

عند تشغيل الشيفرة أعلاه، ستلاحظ تأخيرًا يقارب ثانيتين قبل طباعة عبارة "hello world". يحدث هذا التأخير لأن دالة sleep() توقف تنفيذ الخيط الحالي (calling thread) للمدة المحددة بالثواني، وإن كان التوقيت الفعلي تقريبيًا. بالتالي، يتم إيقاف تنفيذ البرنامج مؤقتًا لمدة ثانيتين تقريبًا في المثال المذكور.

فهم دالة sleep() في بايثون: نظرة معمقة

تُعد دالة sleep() جزءًا أساسيًا من وحدة time في بايثون، والتي تحتوي على العديد من الوظائف المتعلقة بالوقت. لاستخدام دالة sleep()، يجب أولاً استيرادها:

from time import sleep

تستقبل دالة sleep() وسيطًا واحدًا فقط هو seconds (الثواني). يمثل هذا الوسيط مقدار الوقت (بالثواني) الذي ترغب في تأخير تنفيذ الشيفرة من أجله. يمكن أن يكون هذا الوسيط عددًا صحيحًا أو رقمًا عشريًا لتحديد تأخيرات أكثر دقة.

seconds = 2
sleep(seconds)

دالة sleep() قيد التنفيذ: أمثلة عملية

دعنا نستكشف الآن بعض الطرق المختلفة لاستخدام دالة sleep() في سيناريوهات متنوعة.

إضافة تأخير بين الأسطر النصية

بعد استيراد دالة sleep() من وحدة time، يمكننا طباعة سطرين من النص مع تأخير زمني بينهما. سيؤدي ذلك إلى تأخير يقارب ثانيتين بين طباعة كل سطر.

from time import sleep
print("Hello")
sleep(2)
print("World")

عند تشغيل هذه الشيفرة، سيكون التسلسل كالتالي:

  • "Hello": يُطبع هذا السطر فورًا.
  • ثم يحدث تأخير يقارب ثانيتين.
  • "World": يُطبع هذا السطر بعد حوالي ثانيتين من الأول.

التحكم الدقيق في التأخير باستخدام الأرقام العشرية

لتحقيق تأخير زمني أكثر تحديدًا ودقة، يمكنك تمرير رقم عشري (floating point number) إلى دالة sleep().

from time import sleep
print("Prints immediately.")
sleep(0.50)
print("Prints after a slight delay.")

عند تشغيل هذه الشيفرة، ستكون النتيجة:

  • "Prints immediately.": يُطبع هذا السطر فورًا.
  • ثم يحدث تأخير يقارب 0.5 ثانية.
  • "Prints after a slight delay.": يُطبع هذا السطر بعد حوالي 0.5 ثانية من الأول.

إنشاء طوابع زمنية مع تأخير

لنأخذ مثالًا آخر حيث نقوم بإنشاء خمسة طوابع زمنية. سنستخدم دالة sleep() لإضافة تأخير يقارب ثانية واحدة بين كل طابع زمني.

import time

for i in range(5):
    current_time = time.localtime()
    timestamp = time.strftime("%I:%M:%S", current_time)
    time.sleep(1)
    print(timestamp)

في هذا المثال، نقوم باستيراد وحدة time بأكملها للوصول إلى وظائف متعددة منها، بما في ذلك sleep().

import time

ثم نُنشئ حلقة تكرارية for loop ستتكرر خمس مرات:

for i in range(5):
    ...

في كل تكرار، نحصل على الوقت الحالي باستخدام دالة time.localtime():

current_time = time.localtime()

ونُنشئ طابعًا زمنيًا باستخدام دالة أخرى في وحدة time، وهي strftime():

timestamp = time.strftime("%I:%M:%S", current_time)

تأتي بعد ذلك دالة sleep()، والتي ستُسبب تأخيرًا في كل تكرار من الحلقة:

time.sleep(1)

عند تشغيل البرنامج، ننتظر حوالي ثانية قبل طباعة أول طابع زمني، ثم ننتظر حوالي ثانية للطابع الزمني التالي، وهكذا حتى تنتهي الحلقة. سيكون الإخراج مشابهًا لما يلي:

04:08:37
04:08:38
04:08:39
04:08:40
04:08:41

تعزيز تجربة المستخدم باستخدام sleep()

من الاستخدامات الأخرى لدالة sleep() تعزيز تجربة المستخدم عن طريق خلق نوع من التشويق أو التفاعل البطيء.

from time import sleep
story_intro = ["It", "was", "a", "dark", "and", "stormy", "night", "..."]
for word in story_intro:
    print(word)
    sleep(1)

هنا، نقوم بالتكرار عبر قائمة الكلمات في متغير story_intro. لإضافة عنصر التشويق، نستخدم دالة sleep() لإحداث تأخير يقارب ثانية واحدة بعد طباعة كل كلمة.

time.sleep(1)

على الرغم من أن سرعة التنفيذ غالبًا ما تكون في صدارة اهتماماتنا كمطورين، إلا أنه في بعض الأحيان يستحق الأمر التباطؤ وإضافة فواصل زمنية مدروسة في الشيفرة. عندما تنشأ هذه المناسبات، فإنك تعرف الآن الأداة المناسبة وكيفية استخدامها بفعالية.

الخلاصة التقنية

تُعد دالة sleep() من الأدوات الأساسية في ترسانة مطور بايثون، حيث توفر تحكمًا دقيقًا في تدفق تنفيذ البرامج. تتجاوز أهميتها مجرد إيقاف مؤقت بسيط، لتشمل تطبيقات حيوية مثل إدارة الموارد المشتركة، تنظيم استدعاءات الشبكة، وتحسين التفاعل البشري مع التطبيقات. إن استخدامها بذكاء يمكن أن يقلل من استهلاك الموارد، يمنع حظر واجهات المستخدم، ويُقدم تجربة أكثر سلاسة وتفاعلية للمستخدمين. ومع ذلك، يجب استخدامها بحذر لتجنب إبطاء التطبيقات دون داعٍ، أو التسبب في تجمد واجهة المستخدم لفترات طويلة. يكمن مفتاح الفعالية في الموازنة بين الحاجة للتأخير الزمني ومتطلبات الأداء العام للنظام.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *