وظيفة Python Sleep: كيفية إضافة التأخيرات إلى التعليمات البرمجية
نشرت: 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 في مستودع GitHub هذا.
تنفيذ كود التأخير مع وضع السكون ()
كمثال أول ، دعنا نستخدم وظيفة السكون لتأخير تنفيذ برنامج بايثون بسيط.

في مقتطف الشفرة التالي:
- يتم تنفيذ أول جملة
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
أضف تأخيرات مختلفة إلى كتلة التعليمات البرمجية
في المثال السابق ، قدمنا تأخيرًا ثابتًا قدره 5 ثوانٍ بين تنفيذ جملتي print()
. بعد ذلك ، دعنا نبرمج مثالًا آخر لإدخال أوقات تأخير مختلفة عند التكرار خلال تكرار.
في هذا المثال ، نود أن نفعل ما يلي:
- قم بعمل تكرار في جملة ، والوصول إلى كل كلمة ، وطباعتها.
- بعد طباعة كل كلمة ، نود الانتظار لمدة زمنية محددة - قبل طباعة الكلمة التالية في الجملة.
التكرار من خلال سلسلة من الأوتار
تأمل الجملة ، 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?
التكرار خلال المكرر مع تأخيرات مختلفة
دعنا نعيد النظر في المثال:
-
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
.
العد التنازلي في بايثون
كمثال تالٍ ، دعنا نبرمج مؤقتًا بسيطًا للعد التنازلي في بايثون.


دعنا نحدد دالة 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) لتحقيق تأخير لمدة ثانية واحدة بين العد.
- عندما يصل العد إلى 0 ، تطبع الوظيفة "جاهز للذهاب!".
لتحقيق عملية العد التنازلي ، استخدمنا الدالة
range()
بقيمة خطوة سالبة -1.range(n, -1, -1)
سيساعدنا في التكرار عبر نطاق الأرقام في n ، n - 1 ، n - 2 ، وهكذا حتى الصفر. تذكر أنه يتم استبعاد نقطة النهاية افتراضيًا عند استخدام وظيفةrange()
.
بعد ذلك ، دعنا نضيف استدعاء countDown()
مع 5 كوسيطة.
countDown(5)
الآن قم بتشغيل البرنامج النصي countdown.py
وشاهد وظيفة countDown
قيد التشغيل!
$ python3 countdown.py
وظيفة النوم في Multithreading
توفر وحدة خيوط Python إمكانات متعددة للخيوط. في Python ، يضمن Global Interpreter Lock أو GIL وجود مؤشر ترابط نشط واحد فقط يعمل في أي وقت.

ومع ذلك ، أثناء عمليات الإدخال / الإخراج وعمليات الانتظار مثل السكون ، يمكن للمعالج تعليق تنفيذ مؤشر الترابط الحالي والتبديل إلى مؤشر ترابط آخر قيد الانتظار.
لفهم كيفية عمل ذلك ، لنأخذ مثالاً.
إنشاء وتشغيل المواضيع في بايثون
ضع في اعتبارك الوظائف التالية ، 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
مع الوسيطة المحددة في مجموعة args
.
في هذا المثال ، لا تأخذ func1
و func2
و func3
أي وسيطات. لذلك يكفي تحديد اسم الوظيفة فقط كهدف. ثم نحدد كائنات الخيط ، 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()
لإضافة تأخير زمني إلى الكود.
يمكنك الوصول إلى وظيفة sleep()
من وحدة الوقت المدمجة ، time.sleep()
. لتأخير التنفيذ بمقدار n من الثواني ، استخدم time.sleep(n)
. أيضًا ، لقد رأيت أمثلة لتأخير التكرارات اللاحقة في حلقة بقيم مختلفة ، وعد تنازلي ، وتعدد مؤشرات الترابط.
يمكنك الآن استكشاف المزيد من الإمكانات المتقدمة لوحدة الوقت. تريد العمل مع التواريخ والأوقات في بايثون؟ بالإضافة إلى وحدة الوقت ، يمكنك الاستفادة من وظائف وحدات التاريخ والوقت.
بعد ذلك ، تعلم كيفية حساب فرق التوقيت في بايثون.