>127.0.0.1 — [02/Jun/2014 21:14:52] "POST / HTTP/1.1" 200 -
>Server sent 2014-06-03 02:14:57.304741
>127.0.0.1 — [02/Jun/2014 21:14:57] "POST / HTTP/1.1" 200 -
>Server sent 2014-06-03 02:15:02.310377
>127.0.0.1 — [02/Jun/2014 21:15:02] "POST / HTTP/1.1" 200 -
А так — первые три строки от клиента:
>Client received 2014-06-03 02:14:52.299122
>Client received 2014-06-03 02:14:57.304741
>Client received 2014-06-03 02:15:02.310377
4. Возможно, вы видели эпизод телесериала I Love Lucy, в котором Люси и Этель работают на шоколадной фабрике (это классика). Парочка стала отставать, когда линия конвейера, которая направляла к ним на обработку конфеты, начала работать еще быстрее. Напишите симуляцию, которая отправляет разные типы конфет в список Redis, и клиент Lucy, который делает блокирующие выталкивания из списка. Ей нужно 0,5 секунды, чтобы обработать одну конфету. Выведите на экран время и тип каждой конфеты, которую получит Lucy, а также количество необработанных конфет:
redis_choc_supply.py передает бесконечное количество конфет:
>import redis
>import random
>from time import sleep
>conn = redis.Redis()
>varieties = ['truffle', 'cherry', 'caramel', 'nougat']
>conveyor = 'chocolates'
>while True:
>····seconds = random.random()
>····sleep(seconds)
>····piece = random.choice(varieties)
>····conn.rpush(conveyor, piece)
redis_lucy.py может выглядеть так:
>import redis
>from datetime import datetime
>from time import sleep
>conn = redis.Redis()
>timeout = 10
>conveyor = 'chocolates'
>while True:
>····sleep(0.5)
>····msg = conn.blpop(conveyor, timeout)
>····remaining = conn.llen(conveyor)
>····if msg:
>········piece = msg[1]
>········print('Lucy got a', piece, 'at', datetime.utcnow(),
>········', only', remaining, 'left')
Запустите их в любом порядке. Поскольку Люси требуется полсекунды для обработки каждой конфеты и они появляются в среднем каждые полсекунды, это становится похоже на гонку. Чем раньше вы запустите конвейер, тем более сложной сделаете жизнь Люси:
>$ python redis_choc_supply.py&
>$ python redis_lucy.py
>Lucy got a b'nougat' at 2014-06-03 03:15:08.721169, only 4 left
>Lucy got a b'cherry' at 2014-06-03 03:15:09.222816, only 3 left
>Lucy got a b'truffle' at 2014-06-03 03:15:09.723691, only 5 left
>Lucy got a b'truffle' at 2014-06-03 03:15:10.225008, only 4 left
>Lucy got a b'cherry' at 2014-06-03 03:15:10.727107, only 4 left
>Lucy got a b'cherry' at 2014-06-03 03:15:11.228226, only 5 left
>Lucy got a b'cherry' at 2014-06-03 03:15:11.729735, only 4 left
>Lucy got a b'truffle' at 2014-06-03 03:15:12.230894, only 6 left
>Lucy got a b'caramel' at 2014-06-03 03:15:12.732777, only 7 left