回答編集履歴
3
回答の変更
answer
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
### multiprocessing Process と Value を使う
|
1
2
|
```py
|
2
3
|
from multiprocessing import Process, Value
|
3
4
|
import time
|
2
回答の変更
answer
CHANGED
@@ -1,32 +1,30 @@
|
|
1
1
|
```py
|
2
|
-
from multiprocessing import Process,
|
2
|
+
from multiprocessing import Process, Value
|
3
3
|
import time
|
4
4
|
|
5
|
-
def func1(
|
5
|
+
def func1(a: Value):
|
6
6
|
print("[1]スタート")
|
7
7
|
time.sleep(5)
|
8
8
|
print("5秒経過")
|
9
|
-
|
9
|
+
a.value = 1
|
10
10
|
|
11
|
-
def func2(
|
11
|
+
def func2(a: Value):
|
12
12
|
print("[2]スタート")
|
13
13
|
while True:
|
14
|
-
a = queue.get()
|
15
|
-
if a == 1:
|
14
|
+
if a.value == 1:
|
16
15
|
print("値を通知")
|
17
16
|
break
|
18
17
|
|
19
18
|
if __name__ == "__main__":
|
20
|
-
|
19
|
+
a = Value('d', 0)
|
21
|
-
func1_proc = Process(target=func1, args=(
|
20
|
+
func1_proc = Process(target=func1, args=(a,))
|
22
|
-
func2_proc = Process(target=func2, args=(
|
21
|
+
func2_proc = Process(target=func2, args=(a,))
|
23
22
|
func1_proc.start()
|
24
23
|
func2_proc.start()
|
25
24
|
|
26
|
-
queue.close()
|
27
|
-
queue.join_thread()
|
28
25
|
func1_proc.join()
|
29
26
|
func2_proc.join()
|
27
|
+
print(a.value)
|
30
28
|
```
|
31
29
|
|
32
|
-
サンプルを作ってみました
|
30
|
+
サンプルを作ってみました。Value オブジェクトを使うと、共有が可能です。サンプルでは、二つのプロセスが、Value a を使ってデータ共有します。
|
1
回答の変更
answer
CHANGED
@@ -1,19 +1,32 @@
|
|
1
1
|
```py
|
2
|
-
|
2
|
+
from multiprocessing import Process, Queue
|
3
|
-
|
3
|
+
import time
|
4
4
|
|
5
|
-
|
5
|
+
def func1(queue):
|
6
|
-
```py
|
7
|
-
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
|
8
|
-
```
|
9
|
-
|
6
|
+
print("[1]スタート")
|
7
|
+
time.sleep(5)
|
8
|
+
print("5秒経過")
|
9
|
+
queue.put(1)
|
10
10
|
|
11
|
-
|
11
|
+
def func2(queue):
|
12
|
-
[
|
12
|
+
print("[2]スタート")
|
13
|
+
while True:
|
14
|
+
a = queue.get()
|
15
|
+
if a == 1:
|
16
|
+
print("値を通知")
|
17
|
+
break
|
13
18
|
|
19
|
+
if __name__ == "__main__":
|
14
|
-
|
20
|
+
queue = Queue()
|
21
|
+
func1_proc = Process(target=func1, args=(queue,))
|
22
|
+
func2_proc = Process(target=func2, args=(queue,))
|
23
|
+
func1_proc.start()
|
24
|
+
func2_proc.start()
|
25
|
+
|
15
|
-
|
26
|
+
queue.close()
|
27
|
+
queue.join_thread()
|
28
|
+
func1_proc.join()
|
29
|
+
func2_proc.join()
|
16
30
|
```
|
17
31
|
|
18
|
-
実施環境は:
|
19
|
-
Python
|
32
|
+
サンプルを作ってみましたが、違うプロセス間で共有データを保持する機能は Python の基本機能には無いようです。サンプルでは、二つのプロセスが、Queue を使って通知をします。これを改良して、Queue を双方向に使えば、データの共有に近いことはできると思いますが、具体的な用途によります。
|