Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 363

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

470

Приложение Д. Ответы к упражнениям

Lucy got a b'caramel' at 2014-06-03 03:15:12.732777 , only 7 left

Lucy got a b'cherry' at 2014-06-03 03:15:13.234785 , only 6 left

Lucy got a b'cherry' at 2014-06-03 03:15:13.736103 , only 7 left

Lucy got a b'caramel' at 2014-06-03 03:15:14.238152 , only 9 left

Lucy got a b'cherry' at 2014-06-03 03:15:14.739561 , only 8 left

Бедная Люси.

5. Используйте ZeroMQ, чтобы публиковать стихотворение из упражнения 7

главы 7 по одному слову за раз. Напишите потребителя ZeroMQ, который будет

выводить на экран каждое слово, начинающееся с гласной. Напишите другого

потребителя, который будет выводить все слова, состоящие из пяти букв. Знаки

препинания игнорируйте.

Так выглядит сервер, poem_pub.py, который отщипывает по одному слову сти-

хотворения и публикует его в тему vowels, если оно начинается с гласной, и в тему

five, если состоит из пяти букв. Некоторые слова могут оказаться в обеих темах,

некоторые — ни в одной:

import string

import zmq

host = '127.0.0.1'

port = 6789

ctx = zmq.Context()

pub = ctx.socket(zmq.PUB)

pub.bind('tcp://%s:%s' % (host, port))

with open('mammoth.txt', 'rt') as poem:

words = poem.read()

for word in words.split():

word = word.strip(string.punctuation)

data = word.encode('utf-8')

if word.startswith(('a','e','i','o','u','A','e','i','o','u')):

pub.send_multipart([b'vowels', data])

if len(word) == 5:

pub.send_multipart([b'five', data])

Клиент poem_sub.py подписывается на темы vowels и five и выводит на экран тему

и слово:

import string

import zmq

host = '127.0.0.1'

port = 6789

ctx = zmq.Context()

sub = ctx.socket(zmq.SUB)

sub.connect('tcp://%s:%s' % (host, port))

sub.setsockopt(zmq.SUBSCRIBE, b'vowels')

sub.setsockopt(zmq.SUBSCRIBE, b'five')

Глава 11. Конкуренция и сети

471

while True: