>wait 0.8127669040699719 seconds, time is 2014-06-03 05:14:23.275767
7. Создайте объект date, содержащий дату вашего рождения.
Предположим, вы родились 14 августа 1982 года:
>>>> my_day = date(1982, 8, 14)
>>>> my_day
>datetime.date(1982, 8, 14)
8. В какой день недели вы родились?
>>>> my_day.weekday()
>5
>>>> my_day.isoweekday()
>6
Для weekday() значение для понедельника равно 0, а для воскресенья — 6. Для функции isoweekday() значение для понедельника равно 1, а для воскресенья — 7. Поэтому искомый день — суббота.
9. Когда вам будет (или уже было) 10 000 дней от роду?
>>>> from datetime import timedelta
>>>> party_day = my_day + timedelta(days=10000)
>>>> party_day
>datetime.date(2009, 12, 30)
Если это был ваш день рождения, вы, возможно, пропустили еще один повод повеселиться.
Глава 11. Конкуренция и сети
1. Используйте объект класса socket, чтобы реализовать службу, сообщающую текущее время. Когда клиент отправляет на сервер строку 'time', верните текущие дату и время как строку ISO.
Вот так можно написать сервер udp_time_server.py:
>from datetime import datetime
>import socket
>address = ('localhost', 6789)
>max_size = 4096
>print('Starting the server at', datetime.now())
>print('Waiting for a client to call.')
>server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>server.bind(address)
>while True:
>····data, client_addr = server.recvfrom(max_size)
>····if data == b'time':
>········now = str(datetime.utcnow())
>········data = now.encode('utf-8')
>········server.sendto(data, client_addr)
>········print('Server sent', data)
>server.close()
А так — клиент udp_time_client.py:
>import socket
>from datetime import datetime
>from time import sleep
>address····= ('localhost', 6789)
>max_size···= 4096
>print('Starting the client at', datetime.now())
>client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>while True:
>····sleep(5)
>····client.sendto(b'time', address)
>····data, server_addr = client.recvfrom(max_size)
>····print('Client read', data)
>client.close()
Я поместил вызов sleep(5) в верхней части цикла клиента, чтобы сделать обмен данными менее быстрым. Запустите сервер в одном окне:
>$ python udp_time_server.py
>Starting the server at 2014-06-02 20:28:47.415176
>Waiting for a client to call.
Запустите клиент в другом окне:
>$ python udp_time_client.py
>Starting the client at 2014-06-02 20:28:51.454805
Через 5 секунд вы начнете видеть сообщения в обоих окнах. Так выглядят первые три строки от сервера:
>Server sent b'2014-06-03 01:28:56.462565'
>Server sent b'2014-06-03 01:29:01.463906'
>Server sent b'2014-06-03 01:29:06.465802'
А так — первые три строки от клиента: