Python キューイングシステム

Python学習【365日チャレンジ!】330日目のマスターU(@Udemy11)です。

ハリウッドの大物プロデューサーの性的暴行を暴いたジャーナリストの調査報道奇跡を記した【その名を暴け(SHE SAID)】を読みました。

#Me Too運動によって、次々と社会的立場の高い経営者などが告発されて、その地位を失ったり、犯罪者となったりしましたが、その裏付けを取る調査内容がすべて書き記されているノンフィクション・ドキュメンタリーです。

内容的には、この世の中がどれだけ男性社会であるのかということ、権力者が性欲に支配されて、その地位を利用して女性の性を搾取しているのかがよく分かる内容です。

しかも、映画で表現されるような性的搾取が、暗黙の了解として、長年女性がその状況に甘んじるしかない状態になってしまっていたことが白昼にさらされてなお、そのことに目をつぶる人がどれだけ多いのかということにショックを受けました。

#Me Too運動によって世の中は変わったとはいえ、実際には日本にもこのような性的搾取を行っている権力者がいるのかもしれません。

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、キューイングシステムのZeroMQのPUSHとPULLの使い方について学習しました。

socket通信は、以前にも学習しましたが、同じようにサーバーとクライアントのやり取りを行うことができるのが、キューイングシステムで、ZeroMQは、ジョブをやり取りするブローカーを置かないシステムで、サーバーがPUSHの状態で、クライアントのPULLを受け取ることで値を受け渡しました。

詳細について、昨日の記事をごらんください。

今日は、ZeroMQのPUBとSUBの使い方について学習します。

server.py

昨日のPUSHのコードとほぼ同じで、PUBに変更しているだけです。

import time
import zmq

context = zmq.Context()
sock = context.socket(zmq.PUB)
sock.bind("tcp://127.0.0.1:5555")

id = 0
while True:
    id += 1
    sock.send(('sub1:' + str(id)).encode())
    print("Sent: {}".format(id))
    time.sleep(1)

コードは最初に説明したように、5行目のPUSHPUBに変更しているだけですが、11行目のクライアントに渡すデータにsub1:を付け足しています。

client.py

クライアント側は、PULLSUBに変えてその後に1行付け加えています。

import zmq

context = zmq.Context()
sock = context.socket(zmq.SUB)
sock.setsockopt(zmq.SUBSCRIBE, b'sub1:')
sock.connect("tcp://127.0.0.1:5555")

while True:
    message = sock.recv()
    print("Received: {}".format(message.decode()))

5行目が付け加えたコードですが、setsockoptで、サーバー側で追加したsub1:を指定しています。

あとのコードは、PULLのときと同じです。

実行動画

今回のサーバーとクライアントのやり取りも動画にしてみました。

今回は、サーバー側が値を投げ捨てているような感じで、プログラムを実行して1秒毎にIDが1ずつ増加した値が出力されています。

PUSHの場合は、socketに値が渡されているものの、クライアントからのPULLがなければ出力さませんでしたが、今回はプログラムを実行してすぐに値が出力されています。

クライアント側は、サーバーから投げられた値を受け取るので、2つ目のクライアントも1つ目のクライアントと同じ値を受け取っているのがわかるかと思います。

イメージとしては、テレビやラジオみたいな感じで、たくさんの人が同じデータを受け取れるのがPUBSUBですね。

まとめ

PUSHPULLが1対1のやり取りで、PUBSUBが1対多のやり取りと捉えれば問題ないかと思います。

サーバー側がデータを常に渡し続けて、クライアントは接続したときから、サーバーが投げる値を勝手に取得できるという感じですね。

ちょっとした違いで、使える場面は違ってくると思いますが、やはりこれも実践してはじめてその違いを体感できるようになるのだと思います。

これまで酒井さんの講座をほぼ1年かけて受講してきましたが、この先は、どうやら上級向けの内容になるようで、レクチャーを受講してみたものの、ちんぷんかんぷんで、ちょっと理解することができませんでした。

Udemy講師 酒井さん プログラミング Python

なので、酒井さんの講座でのPython学習はここまでとして、アフィリエイトなどで使えるWebスクレイピングの実践を進めていきたいと思います。

それでは、明日もGood Python!