[openlp-dev] New Thread API
Raoul Snyman
raoul at snyman.info
Sun Jan 7 00:59:09 EST 2018
Hi folks,
Over the years we've used more and more threads in OpenLP for running
things like web servers, downloads and other things that need to happen
concurrently with the UI. Unfortunately because everything has been in
bits and in various places, we've never had a unified way to run and
keep track of threads. Thankfully we've largely not run into many
issues, but more recently there have been segfaults not just when OpenLP
stopped, but also preventing OpenLP from starting.
With this in mind I refactored how we run threads in OpenLP:
from openlp.core.threading import ThreadWorker, run_thread
class Worker(ThreadWorker):
def start(self):
"""
Do your stuff in here, then emit the quit signal.
"""
self.server = Server()
self.server.run()
self.quit.emit()
def stop(self):
"""
If your thread is long-running, this is how OpenLP will stop
it
if it is still running when the user exits OpenLP.
"""
self.server.stop()
class MyClass(object):
def run_server(self):
"""
Run the server in a thread
"""
worker = Worker()
run_thread(worker, 'my_server')
I have also put together a wiki page explaining the threads API:
https://wiki.openlp.org/Development:Threads
This change is not in trunk at the time of this e-mail, but the merge
proposal is on Launchpad:
https://code.launchpad.net/~raoul-snyman/openlp/better-threading/+merge/335801
--
Raoul Snyman
+1 (520) 490-9743
raoul at snyman.info
More information about the openlp-dev
mailing list