回答編集履歴

5

誤字修正

2023/01/19 06:10

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -1,4 +1,4 @@
1
- kivy のコードが提示されてないので、kivy でうまくいく理由はわかりませんが、
1
+ kivy のコードが提示されてないので、kivy でうまくいく理由はわかりませんが、
2
2
  マルチスレッドのプログラムでは、現状で期待通りに動いたとしても、
3
3
  問題が再現していないだけで後々問題になる可能性があります。
4
4
 

4

補足説明追記

2023/01/19 06:03

投稿

teamikl
teamikl

スコア8760

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

参考リンクを追加

2023/01/19 05:57

投稿

teamikl
teamikl

スコア8760

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

説明補足

2023/01/19 05:50

投稿

teamikl
teamikl

スコア8760

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

文章校正

2023/01/19 05:13

投稿

teamikl
teamikl

スコア8760

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
  個別のモジュールについては詳しく知りませんが、