Skip to content
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

整理: CancellableEngine を明確化 #1448

Open
wants to merge 11 commits into
base: master
Choose a base branch
from

Conversation

tarepan
Copy link
Contributor

@tarepan tarepan commented Jun 29, 2024

内容

概要: CancellableEngine を明確化

CancellableEngine はリファクタリングが進んでいない。現時点で「プライベート・パブリック命名規則」「変数名の略称」「docstring とコードコメントの使い分け」などに課題がある。

このような背景から、CancellableEngine を全体的に明確化するリファクタリングを提案します。

PR 単位を大きくする方針に従い、本 PR では CancellableEngine 内部に必要なリファクタリングを全て実装しています。

関連 Issue

無し

@tarepan tarepan requested a review from a team as a code owner June 29, 2024 06:25
@tarepan tarepan requested review from Hiroshiba and removed request for a team June 29, 2024 06:25
Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

仕組み難しいですね!!!
「音声合成用のプロセスをいっぱい持っておいて、リクエストが来たら合成を開始し、合成が終わるかリクエストがキャンセルされたらプロセスを待機状態に戻す」というだけなのですが、パーツごとに分かれてると途端に解読が難しくなりますね。。

わかりやすくなっていると思うのですが、いくつか惜しいなと感じたので主にコメントに関してコメントしました!
たぶん、_watching_reqs_and_procs_waiting_procs_and_consのより良い名前が思いつけば勝ち。

Comment on lines +46 to +48
パラメータ use_gpu, voicelib_dirs, voicevox_dir,
runtime_dirs, cpu_num_threads, enable_mock は、 core_initializer を参照
init_processesの数だけプロセスを起動し、procs_and_consに格納する
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(細かいけど)

「その他の引数はcore_initializerを参照」とかにすると、引数名とドキュメントの密結合を防げるかもです。

Comment on lines +58 to +60
# Requestは接続の監視に使用され、Processは通信切断時のプロセスキルに使用される
# クライアントから接続があるとlistにtupleが追加される
# 接続が切断、もしくは音声合成が終了すると削除される
Copy link
Member

@Hiroshiba Hiroshiba Jun 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここ、平易な説明でわかりやすいなと感じました!!!

「接続の監視」を「切断の監視」とするとよりわかりやすいかも。

Suggested change
# Requestは接続の監視に使用され、Processは通信切断時のプロセスキルに使用される
# クライアントから接続があるとlistにtupleが追加される
# 接続が切断、もしくは音声合成が終了すると削除される
# Requestは切断の監視に使用され、Processは切断時のプロセスキルに使用される
# クライアントから接続があるとlistにtupleが追加される
# 切断、もしくは音声合成が終了すると削除される

sub_proc_con1, sub_proc_con2 = Pipe(True)
ret_proc = Process(
def _start_new_process(self) -> tuple[Process, ConnectionType]:
"""音声合成可能な新しいプロセスを開始し、そのプロセスとそこへのコネクションを返す。"""
Copy link
Member

@Hiroshiba Hiroshiba Jun 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不明瞭な代名詞は展開してあげるとより確実

Suggested change
"""音声合成可能な新しいプロセスを開始し、そのプロセスとそこへのコネクションを返す。"""
"""音声合成可能な新しいプロセスを開始し、そのプロセスと、プロセスへのコネクションを返す。"""

watch_con_listからの削除、プロセスの後処理を行う
プロセスが生きている場合はそのままprocs_and_consに加える
死んでいる場合は新しく生成したものをprocs_and_consに加える
合成の後処理をおこなう。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

音声合成の後処理と勘違いされるかも

Comment on lines +104 to 111
# 監視対象リストから除外する
try:
self.watch_con_list.remove((req, proc))
self._watching_reqs_and_procs.remove((req, proc))
except ValueError:
pass

# 待機中リストへ再登録する
try:
Copy link
Member

@Hiroshiba Hiroshiba Jun 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この辺りちょっとややこしいかもですね!
監視も待機の1つなのと、登録ってなんだっけ?となりました。

案ですが、_watching_reqs_and_procs_waiting_procs_and_consをそれぞれ_request_pool_process_poolにしちゃうのとかどうでしょう・・・・?
そうするとここのコメントは、1つ目の方はコメントがいらないほど明確で、2つ目は「プロセスを待機中に戻す」とかにできるなーと。

ただそうすると、(Request, Process)のtupleを_request_poolに入れることになってなんか変な感じはあるのですが。。。
そこはこう。。コメントでうまいこと説明する感じ・・・は難しいですかね。。。。。

音声合成を行う関数
通常エンジンの引数に比べ、requestが必要になっている
また、返り値がファイル名になっている
サブプロセス上において、音声合成用のクエリ・スタイルIDに基づいて音声波形を生成し、音声ファイル名を返す。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

平易に。

Suggested change
サブプロセス上において音声合成用のクエリスタイルIDに基づいて音声波形を生成し音声ファイル名を返す
サブプロセスで音声合成用のクエリスタイルIDから音声を生成し音声ファイル名を返す

assert len(tts_engines.versions()) != 0, "音声合成エンジンがありません。"

# 「キュー入力待機 → キュー入力受付 → 音声合成 → ファイル名送信」をループする
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

入力待機と入力受付の違いがわからず混乱するかも

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants