خانه / آموزش‌ها / آموزش جامع ماژول time و مدیریت زمان در پایتون

آموزش جامع ماژول time و مدیریت زمان در پایتون

🐍 HomeOfPython
|
📅 1404/10/22

سطح مقدماتی (Beginner Level)

ماژول time در پایتون یکی از کتابخانه‌های استاندارد و کلیدی است که برای کار با زمان سیستم (System Time)، ایجاد وقفه در برنامه و تبدیل فرمت‌های زمانی استفاده می‌شود. برخلاف ماژول datetime که بیشتر روی تقویم و تاریخ تمرکز دارد، time بیشتر با Unix Timestamp (تعداد ثانیه‌های گذشته از ۱ ژانویه ۱۹۷۰) و زمان سخت‌افزاری سروکار دارد.

۱. دریافت زمان فعلی (Timestamp و Readable)

کامپیوترها زمان را به صورت یک عدد اعشاری (تعداد ثانیه‌ها از Epoch) ذخیره می‌کنند. برای دریافت این عدد و یا تبدیل آن به متنی که برای انسان خوانا باشد، از توابع زیر استفاده می‌کنیم.

مثال ۱: دریافت Timestamp فعلی

تابع time() زمان حال را برمی‌گرداند.

Python

مثال ۲: تبدیل به فرمت خوانا (ctime)

تابع ctime() زمان را به صورت یک رشته متنی استاندارد (مانند Tue Jan 10 ...) برمی‌گرداند.

Python

مثال ۳: دریافت زمان محلی به صورت ساختاریافته

تابع localtime() زمان را به یک آبجکت struct_time تبدیل می‌کند که می‌توان به اجزای آن (مثل سال، ماه، ساعت) دسترسی داشت.

Python

۲. ایجاد وقفه در برنامه (Sleep)

یکی از پرکاربردترین توابع این ماژول، sleep() است که اجرای برنامه را برای تعداد مشخصی ثانیه متوقف می‌کند. این تابع برای ساخت تایمرها، جلوگیری از ارسال درخواست‌های سریع به سرور (Rate Limiting) و شبیه‌سازی پردازش‌های سنگین کاربرد دارد.

مثال ۱: وقفه ساده

Python

مثال ۲: شمارش معکوس

Python

سطح پیشرفته (Professional Level)

در سطح حرفه‌ای، ماژول time ابزاری حیاتی برای پروفایلینگ (Profiling) و اندازه‌گیری پرفورمنس کد است. استفاده اشتباه از time.time() برای اندازه‌گیری سرعت کد می‌تواند نتایج غلطی ایجاد کند، زیرا time.time() تحت تأثیر تغییرات ساعت سیستم (System Clock updates) قرار می‌گیرد.

۱. اندازه‌گیری دقیق زمان اجرا (Monotonic & Perf_Counter)

برای بنچمارک کردن کد (Benchmarking)، باید از ساعت‌هایی استفاده کنید که «یکنواخت» (Monotonic) باشند؛ یعنی حتی اگر ساعت سیستم توسط کاربر یا اینترنت تغییر کرد، زمان‌سنج به عقب برنگردد.

  • time.perf_counter(): دقیق‌ترین ساعت موجود در سیستم (شامل زمان خواب سیستم نمی‌شود). مناسب برای اندازه‌گیری بازه‌های کوتاه.
  • time.monotonic(): ساعتی که تضمین می‌کند زمان به عقب برنمی‌گردد.
  • time.process_time(): فقط زمانی را محاسبه می‌کند که CPU مشغول پردازش پروسه فعلی بوده است (زمان‌های Sleep و انتظار سیستم‌عامل محاسبه نمی‌شود).

مثال ۱: مقایسه perf_counter و process_time

در این مثال تفاوت زمان «دیواری» (Wall clock) و زمان «پردازنده» (CPU time) را می‌بینیم.

Python

مثال ۲: دکوریتور برای اندازه‌گیری زمان اجرا

یک الگوی رایج (Best Practice) نوشتن دکوریتوری است که زمان اجرای هر تابعی را لاگ کند.

Python

۲. کار با Struct Time و فرمت‌دهی سفارشی

آبجکت struct_time یک تاپل نام‌گذاری شده (Named Tuple) است که خروجی توابعی مثل gmtime() (زمان گرینویچ) و localtime() است. برای تبدیل این آبجکت به فرمت‌های خاص رشته‌ای، از strftime استفاده می‌کنیم.

ساختار struct_time

مثال ۱: فرمت‌دهی تاریخ و ساعت

استفاده از کدهای فرمت‌دهی (مانند %Y, %m, %d).

Python

مثال ۲: تبدیل رشته به آبجکت زمان (strptime)

عملیات برعکس؛ تبدیل یک رشته ورودی به ساختار زمان پایتون.

Python

۳. مدیریت منطقه زمانی (UTC vs Local)

در برنامه‌های حرفه‌ای، معمولاً پیشنهاد می‌شود تمام زمان‌ها را به صورت UTC ذخیره کنید و فقط هنگام نمایش به کاربر، آن را به زمان محلی تبدیل کنید.

Python