2015年5月10日日曜日

開発環境

  • OS X Yosemite - Apple (OS)
  • Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
  • Python 3.4 (プログラミング言語)

Introducing Python: Modern Computing in Simple Packages(Bill Lubanovic (著)、 O'Reilly Media)のChapter 11(Concurrency and Networks)、Things to Do 11.4.を解いてみる。

Things to Do 11.4.

コード(Emacs, BBEdit)

server

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import redis
import time
import random

conn = redis.Redis()
chocolates = ['c1', 'c2', 'c3', 'c4', 'c5']
l = 'chocolates'
for chocolate in chocolates:
    msg = chocolate.encode('utf-8')
    conn.rpush(l, msg)    
    
conn.rpush('chocolates', 'quit')

client

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import redis
import time
import datetime

conn = redis.Redis()
l = 'chocolates'
duration = 0.5
while True:
    time.sleep(duration)
    msg = conn.blpop(l)
    if not msg:
        break
    val = msg[1].decode('utf-8')
    if val == 'quit':
        break
    print(datetime.datetime.utcnow(), val, conn.llen(l))
    
    

入出力結果(Terminal, IPython)

$ redis-server & ./sample4_server.py & ./sample4_client.py
[1] 50278
[2] 50279
[50278] 10 May 15:37:05.806 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
[50278] 10 May 15:37:05.814 * Increased maximum number of open files to 10032 (it was originally set to 256).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 2.8.17 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 50278
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

[50278] 10 May 15:37:05.842 # Server started, Redis version 2.8.17
[50278] 10 May 15:37:05.842 * DB loaded from disk: 0.000 seconds
[50278] 10 May 15:37:05.842 * The server is now ready to accept connections on port 6379
2015-05-10 06:37:06.704135 c1 5
2015-05-10 06:37:07.209497 c2 4
2015-05-10 06:37:07.715719 c3 3
2015-05-10 06:37:08.220876 c4 2
2015-05-10 06:37:08.725962 c5 1
[2]+  Done                    ./sample4_server.py
$ fg
redis-server
  C-c C-c[50278 | signal handler] (1431239840) Received SIGINT scheduling shutdown...
[50278] 10 May 15:37:21.051 # User requested shutdown...
[50278] 10 May 15:37:21.051 * Saving the final RDB snapshot before exiting.
[50278] 10 May 15:37:21.055 * DB saved on disk
[50278] 10 May 15:37:21.055 # Redis is now ready to exit, bye bye...
$ 

0 コメント:

コメントを投稿