teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

typo 修正

2021/06/08 11:17

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -3,8 +3,8 @@
3
3
  consumer/producer の役割を見直しましょう
4
4
 
5
5
  現状のプログラムは、
6
- - メインプロセスで乱数を生成 ← 本来は proceduer の役割のはず
6
+ - メインプロセスで乱数を生成 ← 本来は producer の役割のはず
7
- - proceduer の引数にして起動、キューに入れる ← 中継しかしていない
7
+ - producer の引数にして起動、キューに入れる ← 中継しかしていない
8
8
  - consumer でキューの読み出し
9
9
 
10
10
  また、メインプロセスでループを組んで
@@ -12,11 +12,11 @@
12
12
  (プロセス毎に新しいメモリ空間でモジュールを読み込む為)
13
13
 
14
14
  プロセスをループ毎に作成するのではなく、各プロセス内
15
- それぞれ proceduer, consumer 内でループする事で、
15
+ それぞれ producer , consumer 内でループする事で、
16
16
  同一プロセス内で累計用の変数を保持できるようになります。
17
17
 
18
18
  ----
19
- - proceduer が値の生成をするループ
19
+ - producer が値の生成をするループ
20
20
   乱数を生成してキューに入れる。適当に sleep
21
21
  - consumer がキューから値を読み出すループ
22
22
   キューから値を読み出して表示。

1

余分な情報を削除

2021/06/08 11:16

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -11,20 +11,14 @@
11
11
  毎ループ新しいプロセスを作っている為、グローバル変数が毎回初期化されてます。
12
12
  (プロセス毎に新しいメモリ空間でモジュールを読み込む為)
13
13
 
14
- プロセスをループ毎に作成するのではなく、各プロセス内
14
+ プロセスをループ毎に作成するのではなく、各プロセス内
15
15
  それぞれ proceduer, consumer 内でループする事で、
16
16
  同一プロセス内で累計用の変数を保持できるようになります。
17
17
 
18
- ※ 共有メモリの場合は型によるメモリ制限がある為、桁溢れに注意。
19
-
20
18
  ----
21
19
  - proceduer が値の生成をするループ
22
20
   乱数を生成してキューに入れる。適当に sleep
23
21
  - consumer がキューから値を読み出すループ
24
22
   キューから値を読み出して表示。
25
-  類に加算する。
23
+  類計をカウントしてる変数に加算する。
26
-  ※ キューからの読み出しをブロッキングで行えば、ここでのsleepは不要です。
24
+  ※ キューからの読み出しをブロッキングで行えば、consumer でのsleepは不要です。
27
-
28
- 因みに、マルチプロセスでは標準出力の同期も必要になるので、
29
- logging モジュールの QueueHandler, QueueListener を使い、
30
- メインプロセスでは logging 用キューの読み出しをするとよいです。