Chatbotのプログラム

ずいぶん前に書いたChatbotのプログラムをマルチプロセスに対応させた。

https://github.com/adokoy001/MyChatBot

チャットボットフレームワークとして作っていますが、

あくまでも簡易的・学習用としてのものなのでデータの永続化やスケール性等は全く考慮されていません。 チャットボットのフレームワークとしては無限の拡張性と自由度がありますが、 プロダクションでは全く使い物にならないと思います。

Storableでプロセス間オブジェクト共有

Starman等のマルチプロセスhttpサーバーで起動してもちゃんと動くように、 Storableを使って内部で使っている変数のプロセス間共有を実現させた。

Storableは変数だけではなくオブジェクトやコードリファレンスもプロセス間共有させることができるのでかなり面白い。

その際はStorable::Deparse(B::Deparseのミラクルパワーを使うことを許可)と Storable::Evalのグローバル変数を1にセットすることを忘れずに。

     (略)
    use Storable qw(lock_nstore lock_retrieve);
    $Storable::Deparse = 1;
    $Storable::Eval = 1;

     (中略)

    ## webアプリスタートアップ処理
    my $my_object = MyOriginalObject->new();

    # objectをファイルにsaveして別プロセスと共有
    lock_nstore $my_object, './filename_for_saved_object';

     (中略)

    ## webアプリのリクエスト処理内部

    # 共有されているobjectを読み込み
    $my_object = lock_retrieve './filename_for_saved_object';

     (何らかの処理)

    # objectの内容をsave
    lock_nstore $my_object, './filename_for_saved_object';

httpサーバーの実行ループ中の読み込みから書き込みまではアトミックに処理しなければならないため、 読み込み時からadvisory lockを獲得するようにしている。


prev: 簡易認証基盤的なものを作った
next: 飲食店の待ち行列
created at : 2020-04-01 15:57:39
updated at : 2020-04-01 15:57:39
author : Toshiaki Yokoda