回答編集履歴

5

2021/11/20 10:41

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,21 @@
1
+ ■MultiprocessingのQueueは信用できないというコメントがリファレンスに見つかりました。
2
+
3
+ > [empty()](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Queue.empty)
4
+
5
+ Return True if the queue is empty, False otherwise. Because of multithreading/multiprocessing semantics, **this is not reliable.**
6
+
7
+
8
+
9
+ ですので、**ちゃんとしたいときは[普通のQueue](https://docs.python.org/ja/3/library/queue.html#module-queue)をインポート**しないといけないようです。
10
+
11
+ 勉強になりました。
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
1
19
  プログラムの挙動はちゃんとしています。
2
20
 
3
21
  もし意図と違っていれば、「破壊読み出し」を理解する必要があると思います。

4

2021/11/20 10:41

投稿

退会済みユーザー
test CHANGED
@@ -83,3 +83,5 @@
83
83
 
84
84
 
85
85
  `get()`をすると変数に中身が入り、Queueには値が1つしか入っていなかったため、(破壊読み出しによって)**Queueの中身が空に**なります。
86
+
87
+ Queueに入っていた値を知りたいのであれば、`get()`したときの変数`g`を`print()`する必要があります。

3

2021/11/20 09:24

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,8 @@
1
+ プログラムの挙動はちゃんとしています。
2
+
3
+ もし意図と違っていれば、「破壊読み出し」を理解する必要があると思います。
4
+
1
- ほんの少し修正しました。
5
+ 元のコードをほんの少し(おせっかいな通知が出るように)修正しました。
2
6
 
3
7
 
4
8
 

2

2021/11/20 09:23

投稿

退会済みユーザー
test CHANGED
@@ -78,4 +78,4 @@
78
78
 
79
79
 
80
80
 
81
- `get()`をすると変数に中身が入り、その代わりに**Queueの中身が空に**なります。
81
+ `get()`をすると変数に中身が入り、Queueは値が1つしか入っていなかったため、(破壊読み出しによって)**Queueの中身が空に**なります。

1

2021/11/20 09:21

投稿

退会済みユーザー
test CHANGED
@@ -14,25 +14,59 @@
14
14
 
15
15
  test = Queue()
16
16
 
17
+
18
+
19
+ ############################
20
+
21
+ # 初期状態
22
+
17
- print("Empty?",test.empty()) #True
23
+ print("Empty?",test.empty())
24
+
25
+ # Empty? True
18
26
 
19
27
 
28
+
29
+ ############################
30
+
31
+ # Queueに値を入れた
20
32
 
21
33
  test.put(123)
22
34
 
23
35
  print("PUT!")
24
36
 
25
- print("Empty?",test.empty()) #True
37
+ # PUT!
26
38
 
27
39
 
40
+
41
+ ############################
42
+
43
+ # 値を入れた状態
44
+
45
+ print("Empty?",test.empty())
46
+
47
+ # Empty? False
48
+
49
+
50
+
51
+ ############################
52
+
53
+ # 値を破壊読み出しした
28
54
 
29
55
  g = test.get()
30
56
 
31
57
  print("GET g:",g)
32
58
 
33
- print("Empty?",test.empty()) #True
59
+ # GET g: 123
34
60
 
35
61
 
62
+
63
+ ############################
64
+
65
+ # 破壊読み出しによって空になった状態
66
+
67
+ print("Empty?",test.empty())
68
+
69
+ # Empty? True
36
70
 
37
71
 
38
72