Модуль time

Таймер процессора

В то время как time() возвращает время основных часов, clock() возвращает время процессора. Для этого можно использовать Python get time.

Значения, возвращаемые функцией clock(), отражают фактическое время, используемое программой при ее запуске:

time_clock.py
import hashlib
import time
# Данные, используемые для вычисления контрольной суммы md5
data = open(__file__, 'rb').read()
for i in range(5):
    h = hashlib.sha1()
    print(time.ctime(), ': {:0.3f} {:0.3f}'.format(
        time.time(), time.clock()))
    for i in range(300000):
        h.update(data)
    cksum = h.digest()

В этом примере отформатированная ctime() выводится вместе со значениями с плавающей запятой из time() и clock() через цикл для каждой итерации.

Примечание

Если хотите запустить этот код в своей системе, то может потребоваться добавить во внутренний цикл другие циклы или придется работать с большим количеством данных, чтобы увидеть разницу во времени с помощью Python time:

$ python3 time_clock.py
Sun Aug 14 14:10:32 2016 : 1471198232.327 0.033
Sun Aug 14 14:10:32 2016 : 1471198232.705 0.409
Sun Aug 14 14:10:33 2016 : 1471198233.086 0.787
Sun Aug 14 14:10:33 2016 : 1471198233.466 1.166
Sun Aug 14 14:10:33 2016 : 1471198233.842 1.540

Как правило, часы процессора ничего не засекают, если программа ничего не делает:

time_clock_sleep.py
import time
template = '{} - {:0.2f} - {:0.2f}'
print(template.format(
    time.ctime(), time.time(), time.clock())
)
for i in range(3, 0, -1):
    print('Sleeping', i)
    time.sleep(i)
    print(template.format(
        time.ctime(), time.time(), time.clock())
    )

В этом примере  time sleep python цикл выполняет мало действий, переходя в спящий режим после каждой итерации. Значение time() увеличивается даже тогда, когда приложение находится в спящем режиме, но значение clock() отсутствует:

$ python3 -u time_clock_sleep.py
Sun Aug 14 14:10:34 2016 - 1471198234.28 - 0.03
Sleeping 3
Sun Aug 14 14:10:37 2016 - 1471198237.28 - 0.03
Sleeping 2
Sun Aug 14 14:10:39 2016 - 1471198239.29 - 0.03
Sleeping 1
Sun Aug 14 14:10:40 2016 - 1471198240.29 - 0.03

Вызов sleep() передает управление из текущего потока и указывает ожидать, пока система активирует его. Если программа имеет только один поток, это эффективно блокирует приложение, и оно не работает.

Daemon потоки non-daemon

До этого момента примеры программ ожидали, пока все потоки не завершат свою работу. Иногда программы порождают такой поток, как демон. Он работает, не блокируя завершение основной программы.

Использование демона полезно, если не удается прервать поток или завершить его в середине работы, не потеряв и не повредив при этом данные.

Чтобы пометить поток как demon, вызовите метод setDaemon() с логическим аргументом. По умолчанию потоки не являются «демонами», поэтому передача в качестве аргумента значения True включает режим demon.

import threading
import time
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='(%(threadName)-10s) %(message)s',
                    )

def daemon():
    logging.debug('Starting')
    time.sleep(2)
    logging.debug('Exiting')

d = threading.Thread(name='daemon', target=daemon)
d.setDaemon(True)

def non_daemon():
    logging.debug('Starting')
    logging.debug('Exiting')

t = threading.Thread(name='non-daemon', target=non_daemon)

d.start()
t.start()

Обратите внимание, что в выводимых данных отсутствует сообщение «Exiting» от потока-демона. Все потоки, не являющиеся «демонами» (включая основной поток), завершают работу до того, как поток-демон выйдет из двухсекундного сна

$ python threading_daemon.py

(daemon    ) Starting
(non-daemon) Starting
(non-daemon) Exiting

Чтобы дождаться завершения работы потока-демона, используйте метод join().

import threading
import time
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='(%(threadName)-10s) %(message)s',
                    )

def daemon():
    logging.debug('Starting')
    time.sleep(2)
    logging.debug('Exiting')

d = threading.Thread(name='daemon', target=daemon)
d.setDaemon(True)

def non_daemon():
    logging.debug('Starting')
    logging.debug('Exiting')

t = threading.Thread(name='non-daemon', target=non_daemon)

d.start()
t.start()

d.join()
t.join()

Метод join() позволяет demon вывести сообщение «Exiting».

$ python threading_daemon_join.py

(daemon    ) Starting
(non-daemon) Starting
(non-daemon) Exiting
(daemon    ) Exiting

Также можно передать аргумент задержки (количество секунд, в течение которых поток будет неактивным).

import threading
import time
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='(%(threadName)-10s) %(message)s',
                    )

def daemon():
    logging.debug('Starting')
    time.sleep(2)
    logging.debug('Exiting')

d = threading.Thread(name='daemon', target=daemon)
d.setDaemon(True)

def non_daemon():
    logging.debug('Starting')
    logging.debug('Exiting')

t = threading.Thread(name='non-daemon', target=non_daemon)

d.start()
t.start()

d.join(1)
print 'd.isAlive()', d.isAlive()
t.join()

Истекшее время ожидания меньше, чем время, в течение которого поток-демон спит. Поэтому поток все еще «жив» после того, как метод join() продолжит свою работу.

$ python threading_daemon_join_timeout.py

(daemon    ) Starting
(non-daemon) Starting
(non-daemon) Exiting
d.isAlive() True

Adding a Python sleep() Call With Threads

There are also times when you might want to add a Python call to a thread. Perhaps you’re running a migration script against a database with millions of records in production. You don’t want to cause any downtime, but you also don’t want to wait longer than necessary to finish the migration, so you decide to use threads.

Note: Threads are a method of doing concurrency in Python. You can run multiple threads at once to increase your application’s throughput. If you’re not familiar with threads in Python, then check out An Intro to Threading in Python.

To prevent customers from noticing any kind of slowdown, each thread needs to run for a short period and then sleep. There are two ways to do this:

  1. Use as before.
  2. Use from the module.

Let’s start by looking at .

Вызов sleep() в Tkinter и wxPython

Вызовы в Python можно добавить не только для приложений командной строки. При создании графического пользовательского интерфейса (GUI) периодически нужно добавлять отсрочки. К примеру, при создании приложения FTP для скачивания около миллиона файлов будет разумно добавить вызов между партиями, чтобы снизить нагрузку на сервер.

GUI код выполнит всю обработку в основном потоке, называемом циклом обработки событий, или event loop. При использовании внутри кода GUI заблокируется цикл обработки событий.

К счастью, помимо , можно использовать некоторые другие методы специально для этой задачи. Далее мы рассмотрим, как добавить вызовы в Tkinter и wxPython.

datetime.date

Python может представлять даты различными способами. Для начала, рассмотрим формат datetime.date, так как это один из самых простых объектов date.

Python

print( datetime.date(2012, 13, 14) )

Traceback (most recent call last):
File «<string>», line 1, in <fragment>
builtins.ValueError: month must be in 1..12

1
2
3
4
5

print(datetime.date(2012,13,14))

Traceback(most recent call last)

File»<string>»,line1,in<fragment>

builtins.ValueErrormonth must be in1..12

Python

print(datetime.date(2012, 12, 14)) # datetime.date(2012, 12, 14)

1 print(datetime.date(2012,12,14))# datetime.date(2012, 12, 14)

В данном коде показано, как создать простой объект даты. Класс date принимает три аргумента: год, месяц и день. Если вы укажите неправильное значение, вы увидите ошибку ValueError, как в случае выше. В противном случае вы увидите, что объект datetime.date вернулся. Давайте взглянем на еще один пример:

Python

import datetime
d = datetime.date(2012, 12, 14)

print(d.year) # 2012
print(d.day) # 14
print(d.month) # 12

1
2
3
4
5
6

importdatetime

d=datetime.date(2012,12,14)

print(d.year)# 2012

print(d.day)# 14

print(d.month)# 12

Здесь мы присваиваем объекту date переменную d. Теперь мы можем получить доступ к различным компонентам даты по названиям, таким как d.year или d.month. Давайте посмотрим, какой сейчас день:

Python

import datetime

print(datetime.date.today()) # datetime.date(2017, 4, 5)

1
2
3

importdatetime

print(datetime.date.today())# datetime.date(2017, 4, 5)

Это может быть полезно, когда вам нужно записать, какой сейчас день. Или, если вам нужно выполнить основанный на сегодняшней дате расчет. Мелочь, а приятно.

Sleep function

Like I mentioned, Sleep is a Python built-in function in the time module.

So in order to use sleep, you will need to import the time module first.

sleep takes only one argument which is the period of time in seconds that you want to sleep for.

Using the sleep function in Python 2 and Python 3 is exactly the same, so you won’t need to worry about which version of Python your code is running on.

It is really very simple and straight-forward. Let’s walk through some examples.

Python 2

Let’s say you want to use sleep to add a 10-second delay.

In the following example, I print out the elapsed time between invoking the sleep function and after it returns.

As you can see, the elapsed time is very close to 10 seconds which is what we expect.

The Circadian Rhythm

What is your sleep-wake cycle dictated by?

Answer: the circadian rhythm. The circadian rhythm is a biological cycle of different processes that happen over a time span of about 24 hours.

Here are some key points in the typical 24-hour cycle:

  • 6 A.M. Cortisol levels increase to wake your brain and body
  • 7 A.M. Melatonin production stops
  • 9 A.M. Sex hormone production peaks
  • 10 A.M. Mental alertness levels peak
  • 2:30 P.M. Best motor coordination
  • 3:30 P.M. Fastest reaction time
  • 5 P.M. Greatest cardiovascular efficiency and muscle strength
  • 7 P.M. Highest blood pressure and body temperature
  • 9 P.M. Melatonin production begins to prepare the body for sleep
  • 10 P.M. Bowel movements suppressed as the body quiets down
  • 2 A.M. Deepest sleep
  • 4 A.M. Lowest body temperature

Obviously, these times are not exact and merely display the general pattern of the circadian rhythm. The exact times of your circadian rhythm will vary based on daylight, your habits, and other factors we will discuss later in this guide.

The circadian rhythm is impacted by three main factors: light, time, and melatonin.

Light. Light is probably the most significant pace setter of the circadian rhythm. Staring into a bright light for 30 minutes or so can often reset your circadian rhythm regardless of what time of day it is. More commonly, the rising of the sun and light striking your eyes triggers the transition to a new cycle.

Time. The time of day, your daily schedule, and the order in which you perform tasks can all impact your sleep-wake cycle.

Melatonin. This is the hormone that causes drowsiness and controls body temperature. Melatonin is produced in a predictable daily rhythm, increasing after dark and decreasing before dawn. Researchers believe that the melatonin production cycle helps keep the sleep-wake cycle on track.

Модуль time

Модуль time открывает разработчику Python доступ к нескольким связанным со временем функциям. Модуль основан на «эпохе», точке, с которой начинается время. Для систем Unix, эпоха началась в 1970 году. Чтобы узнать, какая эпоха в вашей системе, попробуйте запустить следующий код:

Python

import time
print(time.gmtime(0))

1
2

importtime

print(time.gmtime())

Результат

Python

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=\
0, tm_wday=3, tm_yday=1, tm_isdst=0)

1
2

time.struct_time(tm_year=1970,tm_mon=1,tm_mday=1,tm_hour=,tm_min=,tm_sec=\

,tm_wday=3,tm_yday=1,tm_isdst=)

Я запустил его на Windows 7, которая также уверена в том, что начало времен датируется 1970м годом. В любом случае, в данном разделе мы ознакомимся со следующими функциями:

  • time.ctime
  • time.sleep
  • time.strftime
  • time.time

Приступим!

Daily Habits for Better Sleep

Next, let’s talk about how to sleep better by harnessing the power of a few simple, daily habits.

Get outside. Aim for at least 30 minutes of sun exposure each day.

Turn out the lights. When it gets dark outside, dim the lights in your house and reduce blue or full-spectrum light in your environment. F.lux, a free software app for your computer, makes the color of your computer’s display adapt to the time of day, warm at night and like sunlight during the day.

Avoid caffeine. If you’re having trouble falling asleep, eliminating caffeine from your diet is a quick win. If you can’t go without your morning cup of coffee, then a good rule of thumb to keep in mind is “No coffee after noon.” This gives caffeine enough time to wear off before bed time.

Stop smoking or chewing tobacco. Tobacco use has been linked to a long line of health issues, and poor sleep is another one on the list. I don’t have any personal experience with tobacco use, but I have heard from friends who have quit successfully that Allen Carr’s Easy Way to Stop Smoking book is the best resource on the topic.

Use the bedroom for sleep and sex only. Is your bedroom designed to promote good sleep? The ideal sleeping environment is dark, cool, and quiet. Don’t make your bedroom a multi-purpose room. Eliminate TVs, laptops, electronics, and clutter. These are simple ways to improve the choice architecture of your bedroom, so that sleep is easier and distraction is harder. When you go to the bedroom, go there to sleep.

Вызов sleep() через time.sleep()

В Python есть встроенная поддержка для погружения программы в сон. У модуля есть функция , что позволяет отсрочить выполнение вызываемого потока на указанное количество секунд.

Мы собрали ТОП Книг для Python программиста которые помогут быстро изучить язык программирования Python.
Список книг: Книги по Python

Далее дан пример использования :

Python

import time
time.sleep(3) # Сон в 3 секунды

1
2

importtime

time.sleep(3)# Сон в 3 секунды

При запуске кода из консоли, задержку нужно проводить перед вводом нового оператора в REPL.

Вы можете протестировать, как долго продлиться сон с помощью модуля Python timeit:

Shell

$ python3 -m timeit -n 3 «import time; time.sleep(3)»
3 loops, best of 3: 3 sec per loop

1
2

$python3-mtimeit-n3″import time; time.sleep(3)»

3loops,best of33sec per loop

Здесь модуль запускается с параметром , что указывает , сколько раз выполнять последующий оператор. Можно заметить, что выполнил оператор 3 раза, а лучшее время длилось 3 секунды, чего и следовало ожидать.

По умолчанию будет запускать код миллион раз. Если бы вы запустили вышеуказанный код, оставив значение по умолчанию, тогда при 3 секундах на итерацию код завис бы примерно на 34 дня! У модуля есть несколько других настроек для командной строки, с которыми можно ознакомиться в .

Создадим что-то более практичное. Системному администратору всегда нужно быть в курсе, если какой-то из сайтов упал. Вы бы хотели иметь возможность проверить код состояния сайта регулярно, но запрашивать веб сервер постоянно нельзя, ведь это сильно повлияет на производительность. В Python одним из простых способов совершить такую проверку является использование системного вызова :

Python

import time
import urllib.request
import urllib.error

def uptime_bot(url):
while True:
try:
conn = urllib.request.urlopen(url)
except urllib.error.HTTPError as e:
# Отправка admin / log
print(f’HTTPError: {e.code} для {url}’)
except urllib.error.URLError as e:
# Отправка admin / log
print(f’URLError: {e.code} для {url}’)
else:
# Сайт поднят
print(f'{url} поднят’)
time.sleep(60)

if __name__ == ‘__main__’:
url = ‘http://www.google.com/py’
uptime_bot(url)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

19
20
21
22

importtime

importurllib.request

importurllib.error

defuptime_bot(url)

whileTrue

try

conn=urllib.request.urlopen(url)

excepturllib.error.HTTPError ase

# Отправка admin / log

print(f’HTTPError: {e.code} для {url}’)

excepturllib.error.URLError ase

# Отправка admin / log

print(f’URLError: {e.code} для {url}’)

else

# Сайт поднят

print(f'{url} поднят’)

if__name__==’__main__’

url=’http://www.google.com/py’

uptime_bot(url)

Здесь создается , что принимает URL в качестве аргумента. Затем функция пытается открыть данный URL c . При возникновении или программа перехватывает ошибку и выводит на экран. На практике вам, скорее всего, придется зафиксировать ошибку и отправить письмо веб-мастеру или системному администратору.

Если ошибок нет, код спокойно выполняется. Вне зависимости от того, что произойдет, программа уходит в сон на 60 секунд. Это значит, что доступ к сайту будет раз за минуту. URL, используемый в примере, содержит ошибки. Ежеминутный вывод на консоли выглядит следующим образом:

Shell

HTTPError: 404 для http://www.google.com/py

1 HTTPError404дляhttpwww.compy

Попробуйте обновить код, используя проверенный хороший URL, к примеру https://www.google.com/. После этого вы можете перезапустить программу и проверить, что изменилось. Также можно попробовать обновить код для отправки сообщения или записи об ошибке. Для получения более подробной информации можете ознакомиться со статьями отправка писем smtp и логирование.

Ограничение одновременного доступа к ресурсам

Как разрешить доступ к ресурсу нескольким worker одновременно, но при этом ограничить их количество. Например, пул соединений может поддерживать фиксированное число одновременных подключений, или сетевое приложение может поддерживать фиксированное количество одновременных загрузок. Semaphore является одним из способов управления соединениями.

import logging
import random
import threading
import time

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s (%(threadName)-2s) %(message)s',
                    )

class ActivePool(object):
    def __init__(self):
        super(ActivePool, self).__init__()
        self.active = []
        self.lock = threading.Lock()
    def makeActive(self, name):
        with self.lock:
            self.active.append(name)
            logging.debug('Running: %s', self.active)
    def makeInactive(self, name):
        with self.lock:
            self.active.remove(name)
            logging.debug('Running: %s', self.active)

def worker(s, pool):
    logging.debug('Waiting to join the pool')
    with s:
        name = threading.currentThread().getName()
        pool.makeActive(name)
        time.sleep(0.1)
        pool.makeInactive(name)

pool = ActivePool()
s = threading.Semaphore(2)
for i in range(4):
    t = threading.Thread(target=worker, name=str(i), args=(s, pool))
    t.start()

В этом примере класс ActivePool является удобным способом отслеживания того, какие потоки могут запускаться в данный момент. Реальный пул ресурсов будет выделять соединение для нового потока и восстанавливать значение, когда поток завершен. В данном случае он используется для хранения имен активных потоков, чтобы показать, что только пять из них работают одновременно.

$ python threading_semaphore.py

2013-02-21 06:37:53,629 (0 ) Waiting to join the pool
2013-02-21 06:37:53,629 (1 ) Waiting to join the pool
2013-02-21 06:37:53,629 (0 ) Running: 
2013-02-21 06:37:53,629 (2 ) Waiting to join the pool
2013-02-21 06:37:53,630 (3 ) Waiting to join the pool
2013-02-21 06:37:53,630 (1 ) Running: 
2013-02-21 06:37:53,730 (0 ) Running: 
2013-02-21 06:37:53,731 (2 ) Running: 
2013-02-21 06:37:53,731 (1 ) Running: 
2013-02-21 06:37:53,732 (3 ) Running: 
2013-02-21 06:37:53,831 (2 ) Running: 
2013-02-21 06:37:53,833 (3 ) Running: []

The Theory of Cumulative Stress

Imagine that your health and energy are a bucket of water. In your day-to-day life, there are things that fill your bucket up. Sleep is one of the main inputs. These are also things like nutrition, meditation, stretching, laughter, and other forms of recovery.

There are also forces that drain the water from your bucket. These are outputs like lifting weights or running, stress from work or school, relationship problems, or other forms of stress and anxiety.

The forces that drain your bucket aren’t all negative, of course. To live a productive life, it can be important to have some of those things flowing out of your bucket. Working hard in the gym, at school, or at the office allows you to produce something of value. But even positive outputs are still outputs and they drain your energy accordingly.

These outputs are cumulative. Even a little leak can result in significant water loss over time.

datetime.datetime

Объект datetime.datetime содержит всю информацию объектов datetime.date плюс datetime.time. Давайте приведем несколько примеров, для лучшего понимания разницы между этим объектом, и объектом datetime.date.

Python

import datetime

a = datetime.datetime(2017, 3, 5)
print(a) # datetime.datetime(2017, 3, 5, 0, 0)

b = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(b) # datetime.datetime(2017, 3, 5, 12, 30, 10)

d = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(d.year) # 2017
print(d.second) # 10
print(d.hour) # 12

1
2
3
4
5
6
7
8
9
10
11
12

importdatetime

a=datetime.datetime(2017,3,5)

print(a)# datetime.datetime(2017, 3, 5, 0, 0)

b=datetime.datetime(2017,3,5,12,30,10)

print(b)# datetime.datetime(2017, 3, 5, 12, 30, 10)

d=datetime.datetime(2017,3,5,12,30,10)

print(d.year)# 2017

print(d.second)# 10

print(d.hour)# 12

Мы видим, что datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе. При работе с базами данных, данные типы объектов будут использоваться достаточно часто. Большую часть вашей работы, вам нужно будет конвертировать форматы date или datetime Python в форматы SQL datetime или timestamp

Обратите внимание на то, что today совместно с datetime.datetime использует два разных метода:

Python

import datetime

a = datetime.datetime.today()
print(a) # datetime.datetime(2017, 4, 5, 0, 16, 54, 989663)

b = datetime.datetime.now()
print(b) # datetime.datetime(2017, 4, 5, 0, 17, 8, 24239)

1
2
3
4
5
6
7

importdatetime

a=datetime.datetime.today()

print(a)# datetime.datetime(2017, 4, 5, 0, 16, 54, 989663)

b=datetime.datetime.now()

print(b)# datetime.datetime(2017, 4, 5, 0, 17, 8, 24239)

Модуль datetime содержит другой метод, под названием strftime. Этот метод позволяет разработчику создавать строку, отображающую время в более понятной для человека форме. Существует целая таблица параметров форматирования, с которой рекомендуется ознакомиться в документации Python, в . Давайте взглянем на несколько примеров, показывающих всю полезность данного метода:

Python

import datetime

a = datetime.datetime.today().strftime(«%Y%m%d»)
print(a) # ‘20170405’

today = datetime.datetime.today()
print( today.strftime(«%m/%d/%Y») ) # ’04/05/2017′

print( today.strftime(«%Y-%m-%d-%H.%M.%S») ) # 2017-04-05-00.18.00

1
2
3
4
5
6
7
8
9

importdatetime

a=datetime.datetime.today().strftime(«%Y%m%d»)

print(a)# ‘20170405’

today=datetime.datetime.today()

print(today.strftime(«%m/%d/%Y»))# ’04/05/2017′

print(today.strftime(«%Y-%m-%d-%H.%M.%S»))# 2017-04-05-00.18.00

Первый пример – это скорее хитрость. В нем показано, как конвертировать сегодняшний объект datetime в строку, следующую за форматом YYYYMMDD (ГГГГММДД). Второй пример более наглядный.

В нем мы присваиваем объект datetime переменной под названием today и применяем два разных параметра форматирования строки. Первый параметр добавляет косые черточки между элементами datetime, а также перегруппировывает datetime, теперь он делится на месяц, день и год. В последнем примере мы создаем временную отметку, которая следует типичному формату: YYYY-MM-DD.HH.MM.SS. Если вам нужно указать год как двухзначный (“YY”), вы можете заменить %Y на %y.

The Cost of Sleep Deprivation

The irony of it all is that many of us are suffering from sleep deprivation so that we can work more, but the drop in performance ruins any potential benefits of working additional hours.

In the United States alone, studies have estimated that sleep deprivation is costing businesses over $100 billion each year in lost efficiency and performance.

As Gregory Belenky, Director of the Sleep and Performance Research Center at Washington State University, puts it: “Unless you’re doing work that doesn’t require much thought, you are trading time awake at the expense of performance.”

And this brings us to the important question: At what point does sleep debt start accumulating? When do performance declines start adding up? According to a wide range of studies, the tipping point is usually around the 7 or 7.5 hour mark. Generally speaking, experts agree that 95 percent of adults need to sleep 7 to 9 hours each night to function optimally. Most adults should be aiming for eight hours per night. Children, teenagers, and older adults typically need even more.

Here’s a useful analogy for why sleep is so important.

Sleep cycle

The sleep cycle is a natural internal system in humans. It is a combination of external conditions, such as light, personal behaviors, and lifestyle choices, and internal conditions, such as brain wave patterns and genetics.

A normal sleep cycle occurs in two distinct states: rapid eye movement (REM) sleep and nonrapid eye movement (NREM) sleep. The body moves between these states a few times a night.

The body cycles through these stages roughly every 90 minutes. Over more cycles, the NREM stages get lighter, and the REM stages get longer.

Ideally, the body will pass through four to five of these cycles each night. Waking up at the end of the cycle, when sleep is lightest, may be best to help the person wake feeling more rested and ready to start the day.

An alarm going off when a person is in one of the deeper stages of sleep may lead to grogginess or difficulty waking up.

Again, these stages vary from person to person, meaning that no single timing for sleep is right for everyone. Paying attention to how they feel in the morning and noting how many hours of sleep they got may help a person identify their sleep cycle and determine how much sleep they need.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector