>host = '127.0.0.1'
>port = 6789
>ctx = zmq.Context()
>pub = ctx.socket(zmq.PUB)
>pub.bind('tcp://%s:%s' % (host, port))
>sleep(1)
>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')):
>········print('vowels', data)
>········pub.send_multipart([b'vowels', data])
>····if len(word) == 5:
>········print('five', data)
>········pub.send_multipart([b'five', data])
Запустите подписчика, а затем и сонного публикатора:
>$ python poem_sub.py
>$ python poem_pub_sleep.py
Теперь у подписчика есть время на то, чтобы получить сообщения по выбранным темам. Так выглядят первые строки выходной информации:
>b'five' b'queen'
>b'vowels' b'of'
>b'five' b'Lying'
>b'vowels' b'at'
>b'vowels' b'ease'
>b'vowels' b'evening'
>b'five' b'flies'
>b'five' b'seize'
>b'vowels' b'All'
>b'five' b'gaily'
>b'five' b'great'
>b'vowels' b'admired'
Если вы не можете добавить вызов sleep() в код публикатора, вы можете синхронизировать публикатора и подписчика с помощью сокетов REQ и REP. Примеры файлов publisher.py и subscriber.py вы можете найти на GitHub.