I’m working on a Qt for python app that needs to run a local web server. For
the web server portion I’m using flask and uWISGI, and at the moment I have my
application launching uWISGI using subprocess before firing off the Qt
QApplication instance and entering the Qt event loop. Some sample code to
illustrate the process:
If __name__ ==“__main__”:
CUR_DIRECTORY = os.path.dirname(__file__)
UWSGI_CONFIG = os.path.realpath(os.path.join(CUR_DIRECTORY, 'Other
Files/TROPOMI.ini'))
UWSGI_EXE = os.path.realpath(os.path.join(CUR_DIRECTORY, 'bin/uwsgi'))
uwsgi_proc = subprocess.Popen([UWSGI_EXE, UWSGI_CONFIG])
qt_app = QApplication(sys.argv)
….
res = qt_app.exec_()
Now this works, but it strikes me as kinda kludgy, as the uWISGI is effectively
a separate application needed. More to the point, however, it’s a bit fragile,
in that if the main application crashes (really, ANY sort of unclean exit), you
get stray uWISGI processes hanging around that prevent proper functioning of
the app the next time you try to launch it. Unfortunately as the app is still
in early days, this happens occasionally. So I have two questions:
1) Is there a “better way”? This GitHub repo:
https://github.com/unbit/uwsgi-qtloop seems to indicate that it should be
possible to run a Qt event loop from within a uWSGI app, thus eliminating the
extra “subprocess” spinoff, but it hasn’t been updated in 5 years and I have
been unable to get it to work with my current Qt/Python/OS setup
2) Baring any “better way”, is there a way to at least ensure that the
subprocess is killed in the event of parent death, or alternately to look for
and kill any such lingering processes on application startup?
P.S. The purpose of running the web server is to be able to load and use Plotly
charts in my app (via a QWebEngineView). So a “better way” may be using a
different plotting library that can essentially “cut out” the middle man. I’ve
tried Matplotlib, but I found its performance to be worse than Plotly - given
the size of my data sets, performance matters. Also I had some glitches with it
when using a lasso selector (plot going black). Still, with some work, it may
be an option.
---
Israel Brewster
Software Engineer
Alaska Volcano Observatory
Geophysical Institute - UAF
2156 Koyukuk Drive
Fairbanks AK 99775-7320
Work: 907-474-5172
cell: 907-328-9145
--
https://mail.python.org/mailman/listinfo/python-list