[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

uWISGI with Qt for Python

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