目次
1. مقدمة عن وظيفة wait()
في Python
يمتلك Python عدة طرق لإيقاف تنفيذ البرنامج مؤقتًا. في الأنظمة أو التطبيقات التي تحتوي على قيود زمنية أو متعلقة بالموارد، تعد آليات الانتظار المناسبة أمرًا ضروريًا. على سبيل المثال، في عمليات استخراج البيانات من الويب أو عمليات الأتمتة، يجب الانتظار حتى يتم تحميل الصفحة أو ظهور العناصر. في هذا المقال، سنشرح آليات الانتظار الأكثر شيوعًا في Python بالتفصيل.سيناريوهات الانتظار الرئيسية:
- أتمتة الويب (مثل Selenium)
- التحكم في العمليات
- إدارة الفواصل الزمنية بين طلبات API
2. طرق الانتظار المعتمدة على الوقت في Python (time.sleep
)
تُعتبر time.sleep
جزءًا من الوحدة المدمجة time
في Python، وتُعد الطريقة الأساسية لإيقاف البرنامج لعدد محدد من الثواني. على سبيل المثال، تُستخدم لضبط طلبات الويب أو تنفيذ عمليات متكررة على فترات زمنية محددة.2.1 كيفية استخدام time.sleep()
import time
# الانتظار لمدة 5 ثوانٍ
time.sleep(5)
print("سيتم التنفيذ بعد 5 ثوانٍ")
يقوم هذا الكود بإيقاف التنفيذ لمدة 5 ثوانٍ، ثم يعرض الرسالة “سيتم التنفيذ بعد 5 ثوانٍ”.2.2 حالات الاستخدام والنصائح
رغم أنtime.sleep
بسيطة، إلا أنها قد لا تكون مناسبة في بعض البيئات. خاصةً في الأنظمة التي تتطلب استجابة فورية (مثل القيادة الذاتية أو المعاملات المالية)، قد يؤدي تأخير بسيط إلى مشاكل.- القيادة الذاتية: تأخير بالمللي ثانية قد يؤدي إلى حوادث خطيرة.
- المعاملات المالية: فارق ثوانٍ في معالجة الطلب قد يسبب خسائر كبيرة.

3. طرق الانتظار في Selenium
يُعتبر Selenium مكتبة قوية للتحكم في المتصفح تلقائيًا. ولكن، إذا بدأ التنفيذ قبل تحميل الصفحة أو ظهور العناصر، ستحدث أخطاء، لذا فإن آليات الانتظار ضرورية.3.1 الانتظار الضمني (implicitly_wait
)
الانتظار الضمني هو أسلوب بسيط يحدد مدة زمنية ينتظرها المتصفح حتى يتم تحميل جميع العناصر. على سبيل المثال، يمكن ضبطه للانتظار حتى 10 ثوانٍ كحد أقصى.from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # الانتظار حتى 10 ثوانٍ
driver.get('https://example.com')
element = driver.find_element_by_id('element_id')
3.2 الانتظار الصريح (WebDriverWait
)
على النقيض، الانتظار الصريح يعتمد على شروط محددة. باستخدام WebDriverWait
، يمكن الانتظار حتى يظهر عنصر معين بكفاءة.from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, 'element_id')))
بهذه الطريقة، يتم الانتظار فقط حتى يظهر العنصر المطلوب، مما يقلل من هدر الموارد.4. إدارة العمليات باستخدام os.wait()
تُستخدم os.wait()
في Python لكي ينتظر العملية الأب انتهاء العملية الابن. تساعد هذه الوظيفة في إدارة المعالجة المتوازية عند تشغيل عمليات متعددة.4.1 الاستخدام الأساسي لـ os.wait()
import os
pid = os.fork()
if pid > 0:
# العملية الأب تنتظر انتهاء العملية الابن
os.wait()
print("انتهت العملية الابن")
else:
# العملية الابن
print("تشغيل العملية الابن...")
في هذا المثال، يستخدم العملية الأب os.wait()
للانتظار حتى تنتهي العملية الابن. لن يُكمل العملية الأب أي مهمة أخرى حتى يتم إنهاء الابن.
5. أمثلة عملية
5.1 أتمتة الويب واستخراج البيانات
في أتمتة الويب، تُعد آليات الانتظار في Selenium مفيدة جدًا. على سبيل المثال، عند التعامل مع عناصر يتم إنشاؤها ديناميكيًا عبر JavaScript، يُفضل استخدام الانتظار الصريح حتى يتم تحميل العنصر بالكامل. هذا يقلل من الأخطاء ويسمح بعمليات استخراج بيانات أكثر كفاءة.5.2 المعالجة المتوازية وإدارة العمليات
في المعالجة المتوازية، يساعدos.wait()
في ضمان تنفيذ العمليات المتعددة دون تعارض على الموارد. في الأنظمة الكبيرة، تعتبر هذه الوظائف أساسية.6. كيفية اختيار آلية الانتظار المناسبة
اختيار طريقة الانتظار يعتمد على السيناريو والدقة المطلوبة.time.sleep
مناسب للحالات البسيطة، بينما في الأتمتة أو العمليات المتعددة، يُفضل استخدام WebDriverWait
في Selenium أو os.wait()
.نصائح لاختيار الطريقة المثلى:
- استخدم
time.sleep
للتأخيرات البسيطة. - استخدم الانتظار الصريح في Selenium لعناصر صفحات الويب الديناميكية.
- استخدم
os.wait()
لإدارة العمليات المتوازية.
7. الخلاصة
من خلال استخدام وظائف الانتظار في Python بشكل فعال، يمكنك تحسين أداء البرامج وزيادة موثوقيتها. سواء كانت الطرق البسيطة مثلtime.sleep
أو الآليات الأكثر تقدمًا مثل Selenium و os.wait()
، فإن اختيار الطريقة المناسبة يساعد على ضمان استقرار التطبيقات.