前提・実現したいこと
以前、マルチスレッドの mainloop() の抜け方について質問した者です。
プログラム自体は思い通りに動いているのですが、最近になってプログラムを実行するとプロセスがどんどん蓄積していくことに気づきました。
蓄積してもプログラム自体は動くのでそれでもいいような気もするのですが、やはり本来は新たに生じたプロセスをその都度 kill した方がいいように思っています。
発生している問題・エラーメッセージ
エラーが発生しているわけではないのですが、プロセスがどんどん蓄積することが問題なのではないかと感じています。
該当のソースコード
python3
1import shutil 2import subprocess 3import sys 4import paramiko 5import scp 6import os 7import cgi 8import concurrent.futures 9from tkinter import * 10from tkinter import ttk 11 12root = Tk() 13 14def delDir(): 15 dir = '/mnt/HDD/localPyserver/dcmTemp' 16 for root, dirs, files in os.walk(dir, topdown=False): 17 for name in files: 18 os.remove(os.path.join(root, name)) 19 for name in dirs: 20 os.rmdir(os.path.join(root, name)) 21 22def scp_get( remoteDir ): 23 with paramiko.SSHClient() as ssh: 24 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 25 ssh.connect(hostname='10.242.134.115', port=22, username='user', password='pass') 26 with scp.SCPClient(ssh.get_transport()) as scpc: 27 try: 28 remotePath = remoteDir 29 print(remotePath) 30 scpc.get( remote_path = remoteDir, local_path = '/mnt/HDD/localPyserver/dcmTemp/', recursive = True) 31 except: 32 print('そのディレクトリは存在しません。') 33 34def weasis() : 35 try: 36 subprocess.run('javaws /mnt/HDD/localPyserver/weasis/weasisStart.jnlp', shell=True, check=True) 37 except subprocess.CalledProcessError: 38 print('外部プログラムの実行に失敗しました', file=sys.stderr) 39 40def func2(): 41 pbIndeterminateVer = ttk.Progressbar(orient=HORIZONTAL, length=200, mode='indeterminate') 42 pbIndeterminateVer.pack(side="left") 43 pbIndeterminateVer.start(10) 44 root.geometry("200x40") 45 root.title("download") 46 root.mainloop() 47 48if __name__ == '__main__': 49 50 executor = concurrent.futures.ThreadPoolExecutor(max_workers=2) 51 form = cgi.FieldStorage() 52 path = form.getvalue('path','') 53 delDir() 54 executor.submit( scp_get, path ) 55 func2() 56 weasis()
試したこと
いろいろ実験してみて、func2()を実行すると新たなプロセスが以下のように蓄積していきます。
ps -fA | grep python
root 977 1 0 21:02 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
user 1645 1631 0 21:02 ? 00:00:00 /home/user/anaconda3/bin/python cgiserver.py
user 1905 1872 0 21:02 ? 00:00:00 python3 /usr/lib/blueberry/safechild /usr/sbin/rfkill event
user 2049 1645 1 21:02 ? 00:00:01 /home/user/anaconda3/bin/python3.7 /mnt/HDD/localPyserver/cgi-bin/openweasis.py
user 2217 1645 0 21:03 ? 00:00:00 /home/user/anaconda3/bin/python3.7 /mnt/HDD/localPyserver/cgi-bin/openweasis.py
user 2362 1645 10 21:04 ? 00:00:02 /home/user/anaconda3/bin/python3.7 /mnt/HDD/localPyserver/cgi-bin/openweasis.py
user 2481 2459 0 21:04 pts/0 00:00:00 grep --color=auto python
そこで、root.destroy() や root.kill() や root.quit() を最後に追加してみても効果はありませんでした。
また、「http://weekendproject9.hatenablog.com/entry/2019/03/01/124444」に書いてあるようなことをやってみると、
意図しないプロセスまで kill されてしまいます。
func2() で発生したプロセスだけを kill することはできるでしょうか?
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー