1. ما هو وحدة time في بايثون؟
1.1 نظرة عامة على وحدة time
تُعتبر وحدة time
في بايثون واحدة من المكتبات القياسية التي تُستخدم لإجراء العمليات المتعلقة بالوقت والتاريخ داخل البرامج.
تعتمد هذه الوحدة على ساعة النظام وتسمح بالحصول على عدد الثواني المنقضية منذ العصر (1 يناير 1970، 00:00:00 بتوقيت UTC)، ولذلك تُستخدم عادةً لإضافة الطوابع الزمنية إلى ملفات السجل أو لقياس أداء البرامج.
من أهم مزايا وحدة time بساطتها؛ فهي لا تتطلب إعدادات معقدة ويمكن البدء باستخدامها بسهولة، مما يجعلها مناسبة لإدارة الوقت وقياسه في المهام الأساسية.
1.2 الوظائف الرئيسية في وحدة time
تتضمن وحدة time
العديد من الدوال المتعلقة بالوقت. فيما يلي بعض الدوال الشائعة:
time.time()
: تُعيد عدد الثواني المنقضية منذ العصر (Epoch) على شكل عدد عشري.time.sleep(secs)
: توقف تنفيذ البرنامج لعدد معين من الثواني. مفيدة عند الحاجة لإيقاف العملية مؤقتًا.time.ctime()
: تُحوّل الطابع الزمني إلى صيغة سهلة القراءة للبشر.
باستخدام هذه الدوال، يمكن التعامل مع عمليات وقت بسيطة وأيضًا إجراء قياسات زمنية متقدمة.
2. كيفية الحصول على الوقت الحالي
2.1 الحصول على الوقت الحالي باستخدام time.time()
تُعيد دالة time.time()
عدد الثواني المنقضية منذ العصر (Epoch). وهي طريقة بسيطة وأساسية للحصول على الوقت الحالي. المثال التالي يوضح ذلك:
import time
current_time = time.time()
print(current_time)
يعرض هذا الكود الوقت الحالي (عدد الثواني كنقطة عشرية منذ العصر). يُستخدم عادةً في العمليات البرمجية الداخلية، ولكن قد يكون غير مناسب للبشر، لذا من الشائع تحويله لصيغة مقروءة كما سنرى في القسم التالي مع strftime()
.
2.2 تحويل الوقت لصيغة مقروءة للبشر باستخدام strftime()
تُستخدم time.strftime()
لتحويل الطابع الزمني إلى صيغ مثل التاريخ والوقت. هذه الوظيفة مهمة في حالات عرض الوقت أو السجلات. المثال التالي يُظهر الوقت الحالي بصيغة “سنة-شهر-يوم ساعة:دقيقة:ثانية”:
import time
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(formatted_time)
في هذا المثال، نستخدم time.localtime()
لتحويل الطابع الزمني إلى الوقت المحلي، ثم ننسقه باستخدام strftime()
.
%Y
للسنة الميلادية الكاملة، %m
للشهر، و%d
لليوم. هذا يجعل البيانات الزمنية سهلة الفهم.
3. كيفية قياس زمن التنفيذ
3.1 قياس زمن التنفيذ الأساسي باستخدام time.time()
أسهل طريقة لقياس زمن تنفيذ عملية هي باستخدام time.time()
:
نحسب الوقت قبل بدء العملية وبعد انتهائها ونحسب الفرق.
import time
start_time = time.time()
# مثال: حلقة تكرارية
for i in range(1000000):
pass
end_time = time.time()
print(f"زمن التنفيذ: {end_time - start_time} ثانية")
في هذا المثال، يتم قياس زمن تنفيذ حلقة. time.time()
يُعطي دقة بالثواني، وهي كافية للقياسات البسيطة.
3.2 القياس عالي الدقة باستخدام perf_counter()
إذا كنت بحاجة لقياس دقيق جدًا، استخدم perf_counter()
، حيث يعتمد على عداد الأداء للنظام ويعطي دقة عالية (حتى أجزاء من الثانية).
import time
start_time = time.perf_counter()
# قياس دقيق للأداء
for i in range(1000000):
pass
end_time = time.perf_counter()
print(f"زمن التنفيذ العالي الدقة: {end_time - start_time} ثانية")
perf_counter()
مناسب للتطبيقات الحساسة للوقت ولتحسين الأداء.
3.3 القياس الدقيق باستخدام وحدة timeit
للمقارنة بين الأداء، تعتبر وحدة timeit
من الأدوات المميزة. تقوم بتنفيذ العملية عدة مرات وتحسب متوسط الزمن.
import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))', number=10000))
في هذا المثال، نقوم بدمج عناصر قائمة 10000 مرة وحساب متوسط الزمن.
تقلل timeit
من التأثيرات الخارجية وتمنح نتائج أكثر دقة.
4. التعامل مع التواريخ: مقارنة مع وحدة datetime
4.1 الحصول على الوقت الحالي باستخدام datetime.now()
بالإضافة إلى وحدة time
، تُعتبر وحدة datetime
مفيدة جدًا، خاصة عند التعامل مع العمليات الحسابية الخاصة بالتواريخ أو إدارة المناطق الزمنية.
from datetime import datetime
now = datetime.now()
print(now)
يُظهر هذا الكود التاريخ والوقت الحالي ككائن datetime
.
وحدة datetime توفر وظائف متقدمة لإجراء العمليات الحسابية على التواريخ بسهولة.
4.2 متى نستخدم time أو datetime؟
وحدة time
مناسبة للعمليات البسيطة وقياس الزمن بدقة عالية،
أما وحدة datetime
فهي أفضل للعمليات المعقدة على التواريخ وإدارة المناطق الزمنية.
5. أمثلة عملية: استخدام وحدة time
5.1 إضافة طابع زمني للسجلات
عند تتبع الأحداث في البرنامج، من الشائع إضافة طابع زمني للسجلات. باستخدام time.ctime()
يمكن إضافة الوقت الحالي بشكل واضح للسجل:
import time
log_entry = f"{time.ctime()} - رسالة خطأ"
print(log_entry)
هذه الطريقة تجعل من السهل متابعة الأحداث أثناء عمل البرنامج.
5.2 تحسين أداء البرامج بقياس الزمن
يمكنك تحديد أجزاء البرنامج التي تحتاج تحسين الأداء عن طريق قياس الزمن باستخدام time
أو timeit
، ثم إجراء التعديلات لتحقيق سرعة أكبر في التنفيذ.
6. الخلاصة
توفر وحدة time
في بايثون طريقة بسيطة وفعالة لإجراء العمليات المتعلقة بالوقت، مثل قياس زمن التنفيذ وإضافة الطوابع الزمنية للسجلات. كما توفر وحدتا perf_counter()
وtimeit
طرقًا متقدمة ودقيقة لقياس الزمن، مما يجعلها أداة مهمة لتحسين أداء البرامج.
في حال الحاجة لإجراء عمليات أكثر تعقيدًا على التواريخ أو إدارة المناطق الزمنية، فإن استخدام وحدة datetime
بالتوازي مع time سيُسهل العمليات البرمجية. فهم خصائص كل وحدة واستخدامها بشكل صحيح سيزيد من فعالية وجودة برمجيات بايثون الخاصة بك.