From 7c1e78a86793abc04183cdc3cee8731dda3eb60b Mon Sep 17 00:00:00 2001 From: danschef Date: Tue, 28 Jan 2020 17:26:21 +0100 Subject: [PATCH 1/2] EnPT processing can now be canceled but process waits until queue task is finished. Signed-off-by: danschef --- enpt_enmapboxapp/enpt_enmapboxapp.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/enpt_enmapboxapp/enpt_enmapboxapp.py b/enpt_enmapboxapp/enpt_enmapboxapp.py index 2eb615b..44326d2 100644 --- a/enpt_enmapboxapp/enpt_enmapboxapp.py +++ b/enpt_enmapboxapp/enpt_enmapboxapp.py @@ -431,14 +431,26 @@ class EnPTAlgorithm(QgsProcessingAlgorithm): q = Queue() Thread(target=reader, args=[process.stdout, q]).start() Thread(target=reader, args=[process.stderr, q]).start() - for _ in range(2): - for source, line in iter(q.get, None): - linestr = line.decode('latin-1').rstrip() - # print("%s: %s" % (source, linestr)) - if source.name == 3: - qgis_feedback.pushInfo(linestr) - if source.name == 4: - qgis_feedback.reportError(linestr) + + # for _ in range(2): + for source, line in iter(q.get, None): + if qgis_feedback.isCanceled(): + # qgis_feedback.reportError('CANCELED') + + import psutil + proc2kill = psutil.Process(process.pid) + for proc in proc2kill.children(recursive=True): + proc.kill() + proc2kill.kill() + + raise KeyboardInterrupt + + linestr = line.decode('latin-1').rstrip() + # print("%s: %s" % (source, linestr)) + if source.name == 3: + qgis_feedback.pushInfo(linestr) + if source.name == 4: + qgis_feedback.reportError(linestr) exitcode = process.poll() -- GitLab From 7f902996a4c9916189aa3a3635fd6a88d872ad16 Mon Sep 17 00:00:00 2001 From: danschef Date: Tue, 28 Jan 2020 18:26:45 +0100 Subject: [PATCH 2/2] Added psutil to requirements. Signed-off-by: danschef --- enpt_enmapboxapp/enpt_enmapboxapp.py | 2 +- setup.py | 1 + tests/gitlab_CI_docker/context/environment_enpt_enmapboxapp.yml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/enpt_enmapboxapp/enpt_enmapboxapp.py b/enpt_enmapboxapp/enpt_enmapboxapp.py index 44326d2..e84e674 100644 --- a/enpt_enmapboxapp/enpt_enmapboxapp.py +++ b/enpt_enmapboxapp/enpt_enmapboxapp.py @@ -32,6 +32,7 @@ from threading import Thread from queue import Queue from multiprocessing import cpu_count from glob import glob +import psutil from qgis.PyQt.QtGui import QIcon from qgis.PyQt.QtWidgets import QMenu, QAction, QDialog, QHBoxLayout, QLabel, QPushButton @@ -437,7 +438,6 @@ class EnPTAlgorithm(QgsProcessingAlgorithm): if qgis_feedback.isCanceled(): # qgis_feedback.reportError('CANCELED') - import psutil proc2kill = psutil.Process(process.pid) for proc in proc2kill.children(recursive=True): proc.kill() diff --git a/setup.py b/setup.py index fefcfa0..80c7aac 100644 --- a/setup.py +++ b/setup.py @@ -39,6 +39,7 @@ with open("enpt_enmapboxapp/version.py", encoding='utf-8') as version_file: exec(version_file.read(), version) requirements = [ + 'psutil', # 'qgis', # 'enmapbox' ] diff --git a/tests/gitlab_CI_docker/context/environment_enpt_enmapboxapp.yml b/tests/gitlab_CI_docker/context/environment_enpt_enmapboxapp.yml index e93158f..500b7fb 100644 --- a/tests/gitlab_CI_docker/context/environment_enpt_enmapboxapp.yml +++ b/tests/gitlab_CI_docker/context/environment_enpt_enmapboxapp.yml @@ -5,6 +5,7 @@ dependencies: - pip # avoids that conda uses the wrong pip - pip: + - psutil - sphinx-argparse - pycodestyle - flake8 -- GitLab