読者です 読者をやめる 読者になる 読者になる

昆布だしで美味しいお雑煮を作ろう

Mochi Python プログラミング

Mochi 0.2.5 以降では、メールボックスを指定してアクター起動できます。 また、アクターではなくメールボックスに直接メッセージ送信できます。

下記の種類のメールボックスを指定可能です。

  • KombuMailbox(Kombu の SimpleQueue ベース)
  • ZmqInbox(ZeroMQ ベース。受信専用)
  • ZmqOutbox(ZeroMQ ベース。送信専用)
  • SQSMailbox(AWS SQS ベース)*0.2.6から
  • LocalMailbox (eventlet.Queue ベース。デフォルト)

メールボックスを指定してアクターを起動するには、spawn_with_mailbox 関数を用います。

従来通りspawn関数を使って起動したアクターは、そのアクター専用のLocalMailboxを持ちます。

以下、SQSMailboxを用いた超単純なproducer-consumerの例です。

# producer.mochi
from mochi.actor.mailbox import SQSMailbox

sqs_mailbox = SQSMailbox('test_queue')
sqs_mailbox ! [1, 2, 3]
sqs_mailbox ! 'exit'
# consumer.mochi
from mochi.actor.mailbox import SQSMailbox

def consume():
    receive:
        'exit':
            print('exit!')
        other:
            print(other)
            consume()

sqs_mailbox = SQSMailbox('test_queue')
spawn_with_mailbox(consume, sqs_mailbox)
wait_all()

# -> pvector([1, 2, 3])
# -> exit!

Kombu(昆布)やZeroMQベースのメールボックス使用例(雀の涙)は下記を参照してください。 https://github.com/i2y/mochi#distributed-computing

注: SQSMailboxを使うには、pip3でboto3をインストールし、awsを使えるようにしておく必要があります。

注: 以前のブログエントリに書いたZmqベースのRemoteActorは、ZeroMQベースのメールボックスで代替できるため、削除されました。

Mochi 0.2.0 をリリースしました。

Mochi Python プログラミング

(7月27日追記)0.2.5以降はこの記事で紹介した機能は削除され、それを代替する機能が追加されています。追加された機能はhttp://i2y.hatenablog.com/entry/2015/07/27/090724を参照してください。

Mochi 0.2.0 をリリースしました。 このバージョンでは、シンプルなリモートアクターの機能を追加しました。

こんな感じのコードになります。

# メッセージを送る側
# メッセージを受ける側がhub.runする前に、メッセージを送る側を実行可能です。
remote_actor = RemoteActor('tcp://foobar:9999/test')
remote_actor ! ['anko', 'mochi']
wait_all()
# メッセージを受ける側(マシンアドレス:foobar)
def test():
    receive:
        [tag, value]:
            print(tag, value)
            test()
        _: print('unsupported message!')

hub = ActorHub('tcp://*:9999')
hub.register('test', spawn(test)) 
# 1つのHubに複数のパスとアクターを登録できます。
hub.run()
wait_all()
# -> anko mochi

風邪がやっと治りました。

生活

先週の水曜(11日)頃から、悪寒や関節痛、頭痛が続いていましたが、今日18時くらいから症状が収まったようです。

治ったので、明日から普通に働けそうです(^_^) 先週は体調不良で仕事の進捗が芳しくなかったため、仕事のことを考えると、ちょっと憂鬱な気分になりますが、明日から普通程度にがんばって働こうと思います。

Mochi で使える便利なツールと Python ライブラリ

Mochi Python プログラミング

sloc

flosse/sloc · GitHub

slocソースコード行数をカウントするツールです。多数の言語に対応しており、githubリポジトリ上の最新バージョンでは Mochi にも対応しています。 現在のgithubリポジトリ上の最新バージョンの対応言語は下記の通りです。

mochi-kernel

Carreau/mochi-kernel · GitHub

mochi-kernelIPythonMochi を使うための IPython Kernel です。 他の言語で同様のものに、IHaskellIScala などがあります。

typeannotations

ceronman/typeannotations · GitHub

typeannotationsPython の型に関する便利関数を提供する小さなライブラリです。

このライブラリが提供する型を作る関数と Mochi のタイプパターンマッチングを組み合わせると、パターンマッチングの表現力が増します。

下記は union の使用例です。

from annotation.typed import union

int_or_bool = union(int, bool)

match [100, "aiueo"]:
    [float first, str second]: str(first) + ":float"
    [int_or_bool first, str second]: str(first) + ":int_or_bool"
    _: "other"

# => 100:int_or_bool

options を使うと下記のようなことができます。

from annotation.typed import options

FileMode = options('r', 'w', 'a', 'r+', 'w+', 'a+')

def open_file:
    str path, FileMode mode: 
        open(path, mode)
    str path:
        open(path, 'r')

predicate を使うと下記のようなことができます。

from annotation.typed import predicate

Positive = predicate(-> $1 > 0)
Even = predicate(-> $1 % 2 == 0)
EvenAndPositive = Even and Positive

match 10:
    EvenAndPositive n: str(n) + ':Even and Positive'
    Even n: str(n) + ':Even'
    Positive n: str(n) + ':Positive'

# => 10:Even and Positive

match -10:
    EvenAndPositive n: str(n) + ':Even and Positive'
    Even n: str(n) + ':Even'
    Positive n: str(n) + ':Positive'

# => -10:Even

match 9:
    EvenAndPositive n: str(n) + ':Even and Positive'
    Even n: str(n) + ':Even'
    Positive n: str(n) + ':Positive'

# => 9:Positive

型を作る関数としては、 union と opitons 、predicate の他に optional や only もあります。

markdownファイルから rstファイルを生成するコマンド

Mochi

Mochi の README.md から README.rst の生成には、Pandoc を使っています。

$ pandoc -f markdown -t rst README.md > README.rst

Github から Mochi を直接インストールする方法

Mochi Python

Mochi を PyPI からではなく Github から直接インストールするには、下記を実行します。

$ pip3 install git+https://github.com/i2y/mochi

アップグレードする場合は、

$ pip3 install --upgrade git+https://github.com/i2y/mochi

です。

下記は Mochi のリポジトリへのリンクです。

i2y/mochi · GitHub

pipの使い方を忘れたときは。。

Python

pipの使い方を忘れたときは、下記のページをまず見ています。

pipの使い方 (2014/1バージョン) — そこはかとなく書くよん。

それでも分からないときは、公式ドキュメントを参照しています。

https://pip.pypa.io/en/latest/