-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
複数プロセス利用時にユーザー辞書を活用するためのpyopenjtalk別プロセス化 #89
Conversation
Gradioのapp.py(app.bat)はどうなりますか? |
@OzoneAsai @litagin02 |
Minor Correction: * logging * declaration of terminate
Minor Correction: * logging * change status return type
Add signal handling for when the process is killed
追加コミット修正内容
備考: 上記対応により、サーバープロセスは完全に独立し、 惜しむらくはMacの環境で動作確認できないことです。 何かご質問等、ありましたらよろしくお願いいたします。 |
text/pyopenjtalk_worker/__init__.py
Outdated
with open("signal_handler.txt", mode="w") as f: | ||
|
||
pass |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここはpassにしていますがログか何かを書き込む予定でしょうか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
デバッグの痕跡が混入してしまったようです。
申し訳ございません。
削除いたします。
ソケット通信を使うやり方に詳しくないので、いくつか質問させてください。
|
Google Colabこちらは想定していませんでした。 Colabなどクラウド環境特有の挙動がどうかというところですが コマンドプロンプトを閉じられた場合その点が抜けていました。申し訳ございません。 対策案サーバーの方で一定時間(30秒など)、 |
summarize the except statement at disconnection
リッスンしているポートを監視して、サーバーの挙動を確認しました。
ご説明遅くなりましたが、 今回の対応は必要となる知識が多岐にわたるため |
確認しました(ログについても教えていただいてありがとうございます、助かりました)。 自分ではできなかったことなので、本当にありがとうございました! |
概要
#71 の対策として、pyopenjtalk別プロセス化とプロセス間通信を導入します。
仕様
コード面
pyopenjtalk_workerというパッケージにまとめました。
従来のpyopenjtalk使用箇所はtextパッケージの中のモジュールのみだったので
この中に配置しました。
import pyopenjtalk
を
from (相対的な位置関係) import pyopenjtalk_worker as pyopenjtalk
に置き換えることでコード変更を最小限にとどめます。
また、importした後に初期化処理
initialize
を呼ぶようにします。後述のサーバー起動を-mオプションによる__main__.pyを実行することにより
実現する関係上、必要です。
(呼ばずに振る舞いを切り替えられれば良かったのですが
どちらの場合も__init__.pyが呼ばれ、
importと-mオプションの分岐方法がわかりませんでした)
プロセス間通信
TCPソケット通信により、行います。
クライアント: importしたプロセス
サーバー: 初期化処理によって起動したプロセス
importした後の初期化処理は以下の流れです。
処理速度やソケットの枯渇を考慮して、接続を保持し続けます。
終了時には接続が切断されるようにします。
また、自プロセスがサーバーに接続している最後のプロセスの場合、
サーバーに停止要求を送り、サーバーを終了します。
(必ずしもサーバーを起動したプロセスが終了させるとは限らない)
主な確認内容
server_editor.pyを起動
webui_train.pyを起動
esd.list にうまく読めない単語を含むようなデータを準備する
webuiでStep 3: 書き起こしファイルの前処理を行いesd.list.cleanedの音素を記録しておく
Ex. GNU
エディターでユーザー辞書登録する
確認: エラーが出ずに終了すること
Ex. 読み: グヌウで登録
webuiで再度、Step 3: 書き起こしファイルの前処理を行う
確認: エラーが出ずに終了すること
esd.list.cleaned を確認
確認: 音素がユーザー辞書登録した読みに対応するものになっていること
エディターを終了する
webuiを終了する
確認: サーバープロセスが残っていないこと
Windows: タスクマネージャーでpythonがないこと
Linux: ps -aux | grep python でないこと
その他、server_fastapi.pyの方も確認しました。
検討事項
値の妥当性やYAMLファイルによる設定変更機能の必要性