Простой Python. Современный стиль программирования (Любанович) - страница 285

>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'

А так — первые три строки от клиента: