質問編集履歴

2

例を変更

2018/04/11 12:05

投稿

namuyan
namuyan

スコア76

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,6 @@
1
+ Python3.5 Windows10 64bit
2
+
1
- Python3.5でMultiprocessingモジュールを用いたプログラムを書いています。
3
+ Multiprocessingモジュールを用いたプログラムを書いています。
2
4
 
3
5
  ユーザーからのコマンド入力をinput()で受け付けていますがMultiprocessingと相性が悪く不具合を起こします。
4
6
 
@@ -18,9 +20,11 @@
18
20
 
19
21
  def hello(message):
20
22
 
21
- time.sleep(3)
23
+ while True:
22
24
 
25
+ time.sleep(1)
26
+
23
- print(message)
27
+ print(message)
24
28
 
25
29
 
26
30
 
@@ -30,13 +34,13 @@
30
34
 
31
35
  print("start")
32
36
 
37
+ Process(target=hello, args=('nice.',)).start()
38
+
33
39
  while True:
34
40
 
35
41
  w = input(">> ")
36
42
 
37
43
  print(w)
38
-
39
- Process(target=hello, args=('nice.'+w,)).start()
40
44
 
41
45
 
42
46
 
@@ -58,35 +62,15 @@
58
62
 
59
63
  a
60
64
 
61
- >> b
62
-
63
- b
64
-
65
65
  >> c
66
66
 
67
67
  c
68
68
 
69
- >> d
69
+ >> nice.
70
70
 
71
- d
71
+ nice.
72
72
 
73
- >> nice.a
74
-
75
- nice.b
73
+ nice.
76
-
77
- e
78
-
79
- e
80
-
81
- >> nice.c
82
-
83
- nice.d
84
-
85
- f
86
-
87
- f
88
-
89
- >> nice.e
90
74
 
91
75
  ```
92
76
 
@@ -100,21 +84,19 @@
100
84
 
101
85
  これは"input()があるとMultiprocessingが始まらない"というPython自体のバグだと思います。
102
86
 
103
- 以下のような出力を想定しています。
87
+ 以下のような出力を想定しています。入力が無くてもループが始まるのが想定です。Linuxだとこういう動きになりました。
104
88
 
105
89
  ```commandline
106
90
 
107
- >> a
91
+ start
108
92
 
109
- a
93
+ >> nice.
110
94
 
111
- nice.a
95
+ nice.
112
96
 
113
- >> b
97
+ nice.
114
98
 
115
- b
116
-
117
- nice.b
99
+ nice.
118
100
 
119
101
  ```
120
102
 

1

くわしく

2018/04/11 12:05

投稿

namuyan
namuyan

スコア76

test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,35 @@
93
93
  input()以外でユーザーから入力を受け付ける必要があります。
94
94
 
95
95
  何か良い方法はありませんでしょうか?
96
+
97
+
98
+
99
+ ## 追記
100
+
101
+ これは"input()があるとMultiprocessingが始まらない"というPython自体のバグだと思います。
102
+
103
+ 以下のような出力を想定しています。
104
+
105
+ ```commandline
106
+
107
+ >> a
108
+
109
+ a
110
+
111
+ nice.a
112
+
113
+ >> b
114
+
115
+ b
116
+
117
+ nice.b
118
+
119
+ ```
120
+
121
+
122
+
123
+ inoutのBlockingがMultiprocessingをBlockして始まりません。
124
+
125
+ 入力すると始まるという事からそう予想しています。
126
+
127
+ このinputはDebugする為に使用しています、任意の関数をexecで実行させたり変数を表示させたりなど。この手段が使えないと不便ですので解決したいです。