From 6f450451b9d6ef598320ebf2f5dd1b07a601adfc Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Fri, 15 Dec 2023 18:07:50 +0100 Subject: [PATCH 1/4] wxGUI/preferences: allow the user set maximum memory to be used by modules --- gui/wxpython/core/settings.py | 8 ++++++- gui/wxpython/gui_core/preferences.py | 32 ++++++++++++++++++++++++++++ gui/wxpython/wxgui.py | 5 ++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/gui/wxpython/core/settings.py b/gui/wxpython/core/settings.py index 6316f37a75d..8614e327c1f 100644 --- a/gui/wxpython/core/settings.py +++ b/gui/wxpython/core/settings.py @@ -22,10 +22,12 @@ import os import sys import copy -import wx import json import collections.abc +import psutil +import wx + from core import globalvar from core.gcmd import GException, GError from core.utils import GetSettingsPath, PathJoin, rgb2str @@ -124,6 +126,7 @@ def _defaultSettings(self): projFile = "" id_loc = self._generateLocale() + total_memory = psutil.virtual_memory().total / 1024**2 self.defaultSettings = { # @@ -267,6 +270,9 @@ def _defaultSettings(self): "interactiveInput": { "enabled": True, }, + "memorymb": { + "value": int(total_memory - (1 / 6 * total_memory)), + }, }, # # d.rast diff --git a/gui/wxpython/gui_core/preferences.py b/gui/wxpython/gui_core/preferences.py index c9f74cb25af..17fe185d30f 100644 --- a/gui/wxpython/gui_core/preferences.py +++ b/gui/wxpython/gui_core/preferences.py @@ -35,6 +35,7 @@ except ImportError: havePwd = False +import psutil import wx import wx.lib.colourselect as csel import wx.lib.mixins.listctrl as listmix @@ -202,6 +203,9 @@ def OnSave(self, event): group="language", key="locale", subkey="lc_all", value=None ) lang = None + # Set gisenv MEMORYMB var value + memorymb = self.settings.Get(group="cmd", key="memorymb", subkey="value") + grass.run_command("g.gisenv", set=f"MEMORYMB={memorymb}") self.settings.SaveToFile() Debug.msg(1, "Settings saved to file '%s'" % self.settings.filePath) self.settingsChanged.emit() @@ -1245,6 +1249,34 @@ def _createCmdPage(self, notebook): gridSizer.Add(verbosity, pos=(row, 1), flag=wx.ALIGN_RIGHT) + row += 1 + # memory + gridSizer.Add( + StaticText( + parent=panel, + id=wx.ID_ANY, + label=_("Maximum memory to be used (in MB):"), + ), + flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, + pos=(row, 0), + ) + memory = SpinCtrl( + parent=panel, + id=wx.ID_ANY, + min=100, + max=int(psutil.virtual_memory().total / 1024**2), + name="Memory", + ) + env = grass.gisenv() + memorymb = env.get( + "MEMORYMB", + int(self.settings.Get(group="cmd", key="memorymb", subkey="value")), + ) + memory.SetValue(memorymb) + self.winId["cmd:memorymb:value"] = memory.GetId() + + gridSizer.Add(memory, pos=(row, 1), flag=wx.ALIGN_RIGHT) + gridSizer.AddGrowableCol(0) sizer.Add(gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5) border.Add(sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3) diff --git a/gui/wxpython/wxgui.py b/gui/wxpython/wxgui.py index 03166ad851b..701b3c8cffa 100644 --- a/gui/wxpython/wxgui.py +++ b/gui/wxpython/wxgui.py @@ -24,7 +24,7 @@ # i18n is taken care of in the grass library code. # So we need to import it before any of the GUI code. from grass.exceptions import Usage -from grass.script.core import set_raise_on_error, warning, error +from grass.script.core import run_command, set_raise_on_error, warning, error from core import globalvar from core.utils import registerPid, unregisterPid @@ -89,6 +89,9 @@ def show_main_gui(): from main_window.frame import GMFrame else: from lmgr.frame import GMFrame + # Set gisenv MEMORYMB var value + memorymb = UserSettings.Get(group="cmd", key="memorymb", subkey="value") + run_command("g.gisenv", set=f"MEMORYMB={memorymb}") try: mainframe = GMFrame( parent=None, id=wx.ID_ANY, workspace=self.workspaceFile From 229e278e8d99aca647230400f2ffaef3a486a60a Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Sat, 16 Dec 2023 05:37:10 +0100 Subject: [PATCH 2/4] Revert "wxGUI/preferences: allow the user set maximum memory to be used by modules" This reverts commit 6f450451b9d6ef598320ebf2f5dd1b07a601adfc. --- gui/wxpython/core/settings.py | 8 +------ gui/wxpython/gui_core/preferences.py | 32 ---------------------------- gui/wxpython/wxgui.py | 5 +---- 3 files changed, 2 insertions(+), 43 deletions(-) diff --git a/gui/wxpython/core/settings.py b/gui/wxpython/core/settings.py index 8614e327c1f..6316f37a75d 100644 --- a/gui/wxpython/core/settings.py +++ b/gui/wxpython/core/settings.py @@ -22,12 +22,10 @@ import os import sys import copy +import wx import json import collections.abc -import psutil -import wx - from core import globalvar from core.gcmd import GException, GError from core.utils import GetSettingsPath, PathJoin, rgb2str @@ -126,7 +124,6 @@ def _defaultSettings(self): projFile = "" id_loc = self._generateLocale() - total_memory = psutil.virtual_memory().total / 1024**2 self.defaultSettings = { # @@ -270,9 +267,6 @@ def _defaultSettings(self): "interactiveInput": { "enabled": True, }, - "memorymb": { - "value": int(total_memory - (1 / 6 * total_memory)), - }, }, # # d.rast diff --git a/gui/wxpython/gui_core/preferences.py b/gui/wxpython/gui_core/preferences.py index 17fe185d30f..c9f74cb25af 100644 --- a/gui/wxpython/gui_core/preferences.py +++ b/gui/wxpython/gui_core/preferences.py @@ -35,7 +35,6 @@ except ImportError: havePwd = False -import psutil import wx import wx.lib.colourselect as csel import wx.lib.mixins.listctrl as listmix @@ -203,9 +202,6 @@ def OnSave(self, event): group="language", key="locale", subkey="lc_all", value=None ) lang = None - # Set gisenv MEMORYMB var value - memorymb = self.settings.Get(group="cmd", key="memorymb", subkey="value") - grass.run_command("g.gisenv", set=f"MEMORYMB={memorymb}") self.settings.SaveToFile() Debug.msg(1, "Settings saved to file '%s'" % self.settings.filePath) self.settingsChanged.emit() @@ -1249,34 +1245,6 @@ def _createCmdPage(self, notebook): gridSizer.Add(verbosity, pos=(row, 1), flag=wx.ALIGN_RIGHT) - row += 1 - # memory - gridSizer.Add( - StaticText( - parent=panel, - id=wx.ID_ANY, - label=_("Maximum memory to be used (in MB):"), - ), - flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, - pos=(row, 0), - ) - memory = SpinCtrl( - parent=panel, - id=wx.ID_ANY, - min=100, - max=int(psutil.virtual_memory().total / 1024**2), - name="Memory", - ) - env = grass.gisenv() - memorymb = env.get( - "MEMORYMB", - int(self.settings.Get(group="cmd", key="memorymb", subkey="value")), - ) - memory.SetValue(memorymb) - self.winId["cmd:memorymb:value"] = memory.GetId() - - gridSizer.Add(memory, pos=(row, 1), flag=wx.ALIGN_RIGHT) - gridSizer.AddGrowableCol(0) sizer.Add(gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5) border.Add(sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3) diff --git a/gui/wxpython/wxgui.py b/gui/wxpython/wxgui.py index 701b3c8cffa..03166ad851b 100644 --- a/gui/wxpython/wxgui.py +++ b/gui/wxpython/wxgui.py @@ -24,7 +24,7 @@ # i18n is taken care of in the grass library code. # So we need to import it before any of the GUI code. from grass.exceptions import Usage -from grass.script.core import run_command, set_raise_on_error, warning, error +from grass.script.core import set_raise_on_error, warning, error from core import globalvar from core.utils import registerPid, unregisterPid @@ -89,9 +89,6 @@ def show_main_gui(): from main_window.frame import GMFrame else: from lmgr.frame import GMFrame - # Set gisenv MEMORYMB var value - memorymb = UserSettings.Get(group="cmd", key="memorymb", subkey="value") - run_command("g.gisenv", set=f"MEMORYMB={memorymb}") try: mainframe = GMFrame( parent=None, id=wx.ID_ANY, workspace=self.workspaceFile From b1c5c424c3975dc5821e0972d13de4bdec0d94ac Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Sat, 16 Dec 2023 06:40:00 +0100 Subject: [PATCH 3/4] Incorporate suggestions --- gui/wxpython/gui_core/preferences.py | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/gui/wxpython/gui_core/preferences.py b/gui/wxpython/gui_core/preferences.py index c9f74cb25af..129d6878858 100644 --- a/gui/wxpython/gui_core/preferences.py +++ b/gui/wxpython/gui_core/preferences.py @@ -202,6 +202,33 @@ def OnSave(self, event): group="language", key="locale", subkey="lc_all", value=None ) lang = None + env = grass.gisenv() + nprocs_gisenv = "NPROCS" + memorydb_gisenv = "MEMORYMB" + # Set gisenv MEMORYMB var value + memorymb = self.memorymb.GetValue() + if memorymb: + grass.run_command( + "g.gisenv", + set=f"{memorydb_gisenv}={memorymb}", + ) + elif env.get(memorydb_gisenv): + grass.run_command( + "g.gisenv", + unset=memorydb_gisenv, + ) + # Set gisenv NPROCS var value + nprocs = self.nprocs.GetValue() + if nprocs: + grass.run_command( + "g.gisenv", + set=f"{nprocs_gisenv}={nprocs}", + ) + elif env.get(nprocs_gisenv): + grass.run_command( + "g.gisenv", + unset=nprocs_gisenv, + ) self.settings.SaveToFile() Debug.msg(1, "Settings saved to file '%s'" % self.settings.filePath) self.settingsChanged.emit() @@ -1245,6 +1272,54 @@ def _createCmdPage(self, notebook): gridSizer.Add(verbosity, pos=(row, 1), flag=wx.ALIGN_RIGHT) + row += 1 + # nprocs + gridSizer.Add( + StaticText( + parent=panel, + id=wx.ID_ANY, + label=_("Number of threads for parallel computing:"), + ), + flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, + pos=(row, 0), + ) + self.nprocs = TextCtrl( + parent=panel, + id=wx.ID_ANY, + value=grass.gisenv().get("NPROCS", ""), + validator=IntegerValidator(), + name="NumberOfProcs", + ) + gridSizer.Add( + self.nprocs, + flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, + pos=(row, 1), + ) + + row += 1 + # memorymb + gridSizer.Add( + StaticText( + parent=panel, + id=wx.ID_ANY, + label=_("Maximum memory to be used (in MB):"), + ), + flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, + pos=(row, 0), + ) + self.memorymb = TextCtrl( + parent=panel, + id=wx.ID_ANY, + value=grass.gisenv().get("MEMORYMB", ""), + validator=IntegerValidator(), + name="MemorySizeMB", + ) + gridSizer.Add( + self.memorymb, + flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, + pos=(row, 1), + ) + gridSizer.AddGrowableCol(0) sizer.Add(gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5) border.Add(sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3) From 97735efa011f9eed5b9105e1cc14ff4a2a3192c6 Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Sat, 23 Dec 2023 20:38:47 +0100 Subject: [PATCH 4/4] Fix labels --- gui/wxpython/gui_core/preferences.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gui/wxpython/gui_core/preferences.py b/gui/wxpython/gui_core/preferences.py index 129d6878858..04eb65a8cba 100644 --- a/gui/wxpython/gui_core/preferences.py +++ b/gui/wxpython/gui_core/preferences.py @@ -1278,7 +1278,9 @@ def _createCmdPage(self, notebook): StaticText( parent=panel, id=wx.ID_ANY, - label=_("Number of threads for parallel computing:"), + label=_( + "Number of threads for parallel computing (supported tools only):" + ), ), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0), @@ -1302,7 +1304,7 @@ def _createCmdPage(self, notebook): StaticText( parent=panel, id=wx.ID_ANY, - label=_("Maximum memory to be used (in MB):"), + label=_("Maximum memory in MB to be used (supported tools only):"), ), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0),