回答編集履歴
5
誤字修正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
kivy のコードが
|
1
|
+
kivy のコードが提示されてないので、kivy でうまくいく理由はわかりませんが、
|
2
2
|
マルチスレッドのプログラムでは、現状で期待通りに動いたとしても、
|
3
3
|
問題が再現していないだけで後々問題になる可能性があります。
|
4
4
|
|
4
補足説明追記
test
CHANGED
@@ -16,6 +16,13 @@
|
|
16
16
|
例外はスレッドセーフな設計で作られた、logging や queue 等の同期プリミティブなオブジェクトのみ
|
17
17
|
複数のスレッドに跨って扱うことができます。(デッドロック問題には、別途注意)
|
18
18
|
|
19
|
+
各ライブラリの、「メインスレッドしか使えない」というのも
|
20
|
+
厳密には、そのライブラリのリソースを初期化したスレッドと同じスレッド内でしか使えない
|
21
|
+
ということが多いので、
|
22
|
+
→ ライブラリの初期化がメインスレッドで行われていると、メインスレッドのみとなる。
|
23
|
+
一応、別スレッドで初期化を行うことの検討の余地もあります。
|
24
|
+
|
25
|
+
|
19
26
|
問題の再現性が低く、実行タイミング依存になると、デバッグが困難になるので
|
20
27
|
(利用者から不具合報告をもらっても、開発者側で再現ができない)
|
21
28
|
設計の段階でスレッドセーフな構成にすることをお勧めします。
|
3
参考リンクを追加
test
CHANGED
@@ -25,3 +25,8 @@
|
|
25
25
|
(tkinter は別スレッドでも動きますが、完全なスレッドセーフではありません。稀に問題が報告されています)
|
26
26
|
メインスレッドでしか動かないライブラリを複数同時に使うには、
|
27
27
|
マルチプロセスにするか、イベントループを独自に作ることになります。
|
28
|
+
|
29
|
+
|
30
|
+
参考事例:
|
31
|
+
[Pythonでマルチプロセスなオーディオプレイヤを作ってみた](https://tech.spark-creative.co.jp/entry/2022/10/18/131711)
|
32
|
+
tkinter + soundcard
|
2
説明補足
test
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
初期化とループ処理が別スレッドになっていて
|
14
14
|
スレッドを跨ぐリソースのアクセスが、タイミングによっては問題になる可能性があります。
|
15
15
|
→スレッド内で使うリソースは、基本そのスレッド内で初期化・後始末を完結します。
|
16
|
-
例外はスレッドセーフな設計で作られた、logging や queue 等のオブジェクトのみ
|
16
|
+
例外はスレッドセーフな設計で作られた、logging や queue 等の同期プリミティブなオブジェクトのみ
|
17
17
|
複数のスレッドに跨って扱うことができます。(デッドロック問題には、別途注意)
|
18
18
|
|
19
19
|
問題の再現性が低く、実行タイミング依存になると、デバッグが困難になるので
|
1
文章校正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
kivy のコードがは提示されてないので、kivy でうまくいく理由はわかりませんが、
|
2
2
|
マルチスレッドのプログラムでは、現状で期待通りに動いたとしても、
|
3
|
-
再現していないだけで後々問題になる可能性があります。
|
3
|
+
問題が再現していないだけで後々問題になる可能性があります。
|
4
4
|
|
5
5
|
確認のために、
|
6
6
|
tkinter を使わずに soundcard, wisper モジュールを
|
@@ -17,7 +17,7 @@
|
|
17
17
|
複数のスレッドに跨って扱うことができます。(デッドロック問題には、別途注意)
|
18
18
|
|
19
19
|
問題の再現性が低く、実行タイミング依存になると、デバッグが困難になるので
|
20
|
-
(利用者から
|
20
|
+
(利用者から不具合報告をもらっても、開発者側で再現ができない)
|
21
21
|
設計の段階でスレッドセーフな構成にすることをお勧めします。
|
22
22
|
|
23
23
|
個別のモジュールについては詳しく知りませんが、
|