質問編集履歴

1

terratail の質問の仕方になれないのでいろいろと試してみています

2020/07/13 17:43

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,7 @@
1
+ ### 前提・実現したいこと
2
+
3
+
4
+
1
5
  以前、マルチスレッドの mainloop() の抜け方について質問した者です。
2
6
 
3
7
 
@@ -5,3 +9,179 @@
5
9
  プログラム自体は思い通りに動いているのですが、最近になってプログラムを実行するとプロセスがどんどん蓄積していくことに気づきました。
6
10
 
7
11
  蓄積してもプログラム自体は動くのでそれでもいいような気もするのですが、やはり本来は新たに生じたプロセスをその都度 kill した方がいいように思っています。
12
+
13
+ ### 発生している問題・エラーメッセージ
14
+
15
+
16
+
17
+ エラーが発生しているわけではないのですが、プロセスがどんどん蓄積することが問題なのではないかと感じています。
18
+
19
+
20
+
21
+ ### 該当のソースコード
22
+
23
+ ```python3
24
+
25
+ import shutil
26
+
27
+ import subprocess
28
+
29
+ import sys
30
+
31
+ import paramiko
32
+
33
+ import scp
34
+
35
+ import os
36
+
37
+ import cgi
38
+
39
+ import concurrent.futures
40
+
41
+ from tkinter import *
42
+
43
+ from tkinter import ttk
44
+
45
+
46
+
47
+ root = Tk()
48
+
49
+
50
+
51
+ def delDir():
52
+
53
+ dir = '/mnt/HDD/localPyserver/dcmTemp'
54
+
55
+ for root, dirs, files in os.walk(dir, topdown=False):
56
+
57
+ for name in files:
58
+
59
+ os.remove(os.path.join(root, name))
60
+
61
+ for name in dirs:
62
+
63
+ os.rmdir(os.path.join(root, name))
64
+
65
+
66
+
67
+ def scp_get( remoteDir ):
68
+
69
+ with paramiko.SSHClient() as ssh:
70
+
71
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
72
+
73
+ ssh.connect(hostname='10.242.134.115', port=22, username='user', password='pass')
74
+
75
+ with scp.SCPClient(ssh.get_transport()) as scpc:
76
+
77
+ try:
78
+
79
+ remotePath = remoteDir
80
+
81
+ print(remotePath)
82
+
83
+ scpc.get( remote_path = remoteDir, local_path = '/mnt/HDD/localPyserver/dcmTemp/', recursive = True)
84
+
85
+ except:
86
+
87
+ print('そのディレクトリは存在しません。')
88
+
89
+
90
+
91
+ def weasis() :
92
+
93
+ try:
94
+
95
+ subprocess.run('javaws /mnt/HDD/localPyserver/weasis/weasisStart.jnlp', shell=True, check=True)
96
+
97
+ except subprocess.CalledProcessError:
98
+
99
+ print('外部プログラムの実行に失敗しました', file=sys.stderr)
100
+
101
+
102
+
103
+ def func2():
104
+
105
+ pbIndeterminateVer = ttk.Progressbar(orient=HORIZONTAL, length=200, mode='indeterminate')
106
+
107
+ pbIndeterminateVer.pack(side="left")
108
+
109
+ pbIndeterminateVer.start(10)
110
+
111
+ root.geometry("200x40")
112
+
113
+ root.title("download")
114
+
115
+ root.mainloop()
116
+
117
+
118
+
119
+ if __name__ == '__main__':
120
+
121
+
122
+
123
+ executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
124
+
125
+ form = cgi.FieldStorage()
126
+
127
+ path = form.getvalue('path','')
128
+
129
+ delDir()
130
+
131
+ executor.submit( scp_get, path )
132
+
133
+ func2()
134
+
135
+ weasis()
136
+
137
+ ```
138
+
139
+
140
+
141
+ ### 試したこと
142
+
143
+
144
+
145
+ いろいろ実験してみて、func2()を実行すると新たなプロセスが以下のように蓄積していきます。
146
+
147
+
148
+
149
+ ps -fA | grep python
150
+
151
+
152
+
153
+ root 977 1 0 21:02 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
154
+
155
+ user 1645 1631 0 21:02 ? 00:00:00 /home/user/anaconda3/bin/python cgiserver.py
156
+
157
+ user 1905 1872 0 21:02 ? 00:00:00 python3 /usr/lib/blueberry/safechild /usr/sbin/rfkill event
158
+
159
+ user 2049 1645 1 21:02 ? 00:00:01 /home/user/anaconda3/bin/python3.7 /mnt/HDD/localPyserver/cgi-bin/openweasis.py
160
+
161
+ user 2217 1645 0 21:03 ? 00:00:00 /home/user/anaconda3/bin/python3.7 /mnt/HDD/localPyserver/cgi-bin/openweasis.py
162
+
163
+ user 2362 1645 10 21:04 ? 00:00:02 /home/user/anaconda3/bin/python3.7 /mnt/HDD/localPyserver/cgi-bin/openweasis.py
164
+
165
+ user 2481 2459 0 21:04 pts/0 00:00:00 grep --color=auto python
166
+
167
+
168
+
169
+ そこで、root.destroy() や root.kill() や root.quit() を最後に追加してみても効果はありませんでした。
170
+
171
+
172
+
173
+ また、「http://weekendproject9.hatenablog.com/entry/2019/03/01/124444」に書いてあるようなことをやってみると、
174
+
175
+ 意図しないプロセスまで kill されてしまいます。
176
+
177
+
178
+
179
+ func2() で発生したプロセスだけを kill することはできるでしょうか?
180
+
181
+
182
+
183
+ ### 補足情報(FW/ツールのバージョンなど)
184
+
185
+
186
+
187
+ ここにより詳細な情報を記載してください。