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

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ベースのメールボックスで代替できるため、削除されました。