今さらPython3 (74) - Redisを使った並行処理
第11章は内容が濃いので進み方もゆっくり。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Redis
前回、Redisに触ったのは第8章だったんだね。随分前の事のように感じる。ということで、インストール済。
ソースコードを用意して、
Redisを起動してから、
$ redis-server /usr/local/etc/redis.conf 12703:M 28 Dec 08:47:10.014 * Increased maximum number of open files to 10032 (it was originally set to 256). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.0.1 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 12703 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 12703:M 28 Dec 08:47:10.021 # Server started, Redis version 3.0.1 12703:M 28 Dec 08:47:10.022 * DB loaded from disk: 0.002 seconds 12703:M 28 Dec 08:47:10.022 * The server is now ready to accept connections on port 6379
乾燥係からスタート。後ろに&を付けるとバックグランド実行になる。なぜかコマンドプロンプトの後ろにDryer is startingが表示されて何も入力できないように見えるが、構わず洗い係を起動させると、こんな感じの結果が得られる。
$ python3 redis_dryer.py & [1] 12719 $ Dryer is starting python3 redis_washer.py Washer is starting Washed salad Washed bread Dried salad Washed entree Dried bread Washed dessert Dried entree Washer is done Dried dessert Dishes are dried [1]+ Done python3 redis_dryer.py
これは、まあこんなんだろなという感じで特に目新しいところはないので次へ。redis_dryer2.pyを作る。
こんな感じで実行。
$ python3 redis_dryer2.py & [1] 12831 $ Dryer process 12832 is starting Dryer process 12833 is starting Dryer process 12834 is starting python3 redis_washer.py Washer is starting Washed salad 12832: drided salad Washed bread 12833: drided bread Washed entree 12834: drided entree Washed dessert Washer is done $ Dryer proces 12833 id done 12834: drided dessert Dryer proces 12832 id done Dryer proces 12834 id done [1]+ Done python3 redis_dryer2.py
ペタッと結果だけ貼ってしまうとイメージしにくいけど、quitを受け取った12833が最初にdoneとなり、その後約20秒待ってから12832,12834はタイムアウトを起こしてdoneになったと。ちなみに最後の1行はポケーッと待っていても表示されない。1回Enterを叩く必要がある。ちなみに、乾燥係を起動してから20秒何もしないでポケーッとしていると、全プロセスがタイムアウトで終了する。これも当たり前だよね。
個人でプログラムを書いているようなときは、スタンドアロンで済んでしまうことも多々あるけど、業務系とかのシステムだとキューで飛ばして整合性がどうのこうのという話はよくあるので、そこら辺の設計をイチから考えるより、ありもののパッケージを選択肢にしてもいいんだよね。
Homepage | Celery: Distributed Task Queue
andyet/thoonk.py · GitHub
RQ: Simple job queues for Python
(つづく)