From 68fdcb3f908648b13e55872cb052d340e9f0281b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 26 Jan 2023 18:31:45 +0100 Subject: [PATCH] Add option to disable thread in tryton As shown in #11767 on some platform the Python threading does not work well with Gtk. So it is good to have the option to disable it at the cost of less performance. --- tryton/CHANGELOG | 1 + tryton/tryton/bus.py | 2 ++ tryton/tryton/config.py | 4 ++++ tryton/tryton/gui/main.py | 32 +++++++++++++++++------------ tryton/tryton/gui/window/dblogin.py | 10 ++++++--- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/tryton/CHANGELOG b/tryton/CHANGELOG index 89f865215c..70da3cdc81 100644 --- a/tryton/CHANGELOG +++ b/tryton/CHANGELOG @@ -1,3 +1,4 @@ +* Add option to disable thread * Remove support for Python 3.7 * Add support for Python 3.11 * Save and Restore tree state on List Form diff --git a/tryton/tryton/bus.py b/tryton/tryton/bus.py index 6f2de7dbc9..cc6343f4c6 100644 --- a/tryton/tryton/bus.py +++ b/tryton/tryton/bus.py @@ -25,6 +25,8 @@ CHANNELS = [ def listen(connection): + if not CONFIG['thread']: + return listener = threading.Thread( target=_listen, args=(connection,), daemon=True) listener.start() diff --git a/tryton/tryton/config.py b/tryton/tryton/config.py index 83e579307b..1272fa183f 100644 --- a/tryton/tryton/config.py +++ b/tryton/tryton/config.py @@ -97,6 +97,9 @@ class ConfigManager(object): help=_("specify the login user")) parser.add_option("-s", "--server", dest="host", help=_("specify the server hostname:port")) + parser.add_option( + '--no-thread', default=True, action='store_false', dest='thread', + help=_("disable thread usage")) opt, self.arguments = parser.parse_args() self.rcfile = opt.config or os.path.join( get_config_dir(), 'tryton.conf') @@ -125,6 +128,7 @@ class ConfigManager(object): for arg in ['login', 'host']: if getattr(opt, arg): self.options['login.' + arg] = getattr(opt, arg) + self.options['thread'] = opt.thread def save(self): try: diff --git a/tryton/tryton/gui/main.py b/tryton/tryton/gui/main.py index 674d83d731..a6fb590d98 100644 --- a/tryton/tryton/gui/main.py +++ b/tryton/tryton/gui/main.py @@ -522,19 +522,25 @@ class Main(Gtk.Application): except RPCException: prefs = {} - threads = [] - for target in ( - common.IconFactory.load_icons, - common.MODELACCESS.load_models, - common.MODELHISTORY.load_history, - common.MODELNOTIFICATION.load_names, - common.VIEW_SEARCH.load_searches, - ): - t = threading.Thread(target=target) - threads.append(t) - t.start() - for t in threads: - t.join() + targets = [ + common.IconFactory.load_icons, + common.MODELACCESS.load_models, + common.MODELHISTORY.load_history, + common.MODELNOTIFICATION.load_names, + common.VIEW_SEARCH.load_searches, + ] + if CONFIG['thread']: + threads = [] + for target in targets: + t = threading.Thread(target=target) + threads.append(t) + t.start() + for t in threads: + t.join() + else: + for target in targets: + target() + if prefs and 'language_direction' in prefs: translate.set_language_direction(prefs['language_direction']) CONFIG['client.language_direction'] = \ diff --git a/tryton/tryton/gui/window/dblogin.py b/tryton/tryton/gui/window/dblogin.py index f0e9484fc8..96099e59f8 100644 --- a/tryton/tryton/gui/window/dblogin.py +++ b/tryton/tryton/gui/window/dblogin.py @@ -286,9 +286,13 @@ class DBListEditor(object): def refresh_databases(self, host, port): self.dbs_updated = threading.Event() - threading.Thread(target=self.refresh_databases_start, - args=(host, port)).start() - GLib.timeout_add(100, self.refresh_databases_end, host, port) + if CONFIG['thread']: + threading.Thread(target=self.refresh_databases_start, + args=(host, port)).start() + GLib.timeout_add(100, self.refresh_databases_end, host, port) + else: + self.refresh_databases_start(host, port) + self.refresh_databases_end(host, port) def refresh_databases_start(self, host, port): dbs = None