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

ENH: Windowsでエンジンの多重起動を可能にする #1514

Merged
merged 6 commits into from
Jan 15, 2025

Conversation

sabonerune
Copy link
Contributor

内容

コンパイル済み辞書を起動しているエンジンのプロセスごとに割り当てることでエンジンの多重起動ができるようにします。

コンパイル済み辞書のファイル名を常にランダムにすることで実現します。

POSIXではopenjtalkが辞書を開いた後にunlinkすることで辞書が残ってしまうことを防ぎます。

WIndowsではCreateFileWFILE_FLAG_DELETE_ON_CLOSEを付けて開いた後すぐに閉じることでファイルが閉じた時に自動的に削除されます。

関連 Issue

その他

これまでの議論 #1347 (comment)

@sabonerune sabonerune requested a review from a team as a code owner January 15, 2025 11:36
@sabonerune sabonerune requested review from Hiroshiba and removed request for a team January 15, 2025 11:36
Copy link
Contributor Author

@sabonerune sabonerune left a comment

Choose a reason for hiding this comment

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

思った以上にWindows用のコードが大きくなってしまいました…

_FILE_SHARE_READ = 0x00000001
_OPEN_EXISTING = 3
_FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
_INVALID_HANDLE_VALUE = HANDLE(-1).value
Copy link
Contributor Author

Choose a reason for hiding this comment

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

INVALID_HANDLE_VALUEの値がMicrosoftのドキュメントのどこにも書いてありませんでした。

Win32のhandleapi.hの内容を直接確認したところ#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)となっていたのでこのようにしておきました。

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.

ほぼLGTMです!!!

ちょっとこちらで一部書き換えさせていただきます!!

pyproject.toml Outdated Show resolved Hide resolved
voicevox_engine/user_dict/user_dict_manager.py Outdated Show resolved Hide resolved
voicevox_engine/user_dict/user_dict_manager.py Outdated Show resolved Hide resolved
voicevox_engine/user_dict/user_dict_manager.py Outdated Show resolved Hide resolved
@Hiroshiba
Copy link
Member

Hiroshiba commented Jan 15, 2025

1bd3d55 でちょっと変更させていただきました!
utilityに置こうとしたけど、辞書に閉じた関数のが良さそうだったのでやっぱりuser_dict_manager.py内にしました。
あとOSの分岐を関数内に移しました。

あとは↓が解決すればマージできそう!
#1514 (comment)

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.

LGTM!!!

ありがとうございました!
実際にlatestビルドされたエンジンを使ってみたいと思います!!

@Hiroshiba Hiroshiba merged commit 81163c4 into VOICEVOX:master Jan 15, 2025
4 checks passed
@sabonerune sabonerune deleted the enh/tmp-dict branch January 15, 2025 16:32
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.

windowsでエンジンの多重起動を可能にする(openjtalkによるエラーを出なくする)
2 participants