That doesn't make any sense. Can you post a minimal example?
> Sent: Thursday, December 05, 2019 at 7:16 PM > From: "Israel Brewster" <ijbrews...@alaska.edu> > To: "Jason H" <jh...@gmx.com> > Cc: "Kerby Geffrard" <kerby.geffr...@autodesk.com>, "pyside@qt-project.org" > <pyside@qt-project.org> > Subject: Re: [PySide] Keeping GUI responsive > > > > > On Dec 5, 2019, at 7:18 AM, Jason H <jh...@gmx.com> wrote: > > > > > > I don't thinkso. The Python multiprocessing module uses multiple processes, > > so you have to copy data between them. QThreads are in the same process so > > no copy is needed. > > GIL only matters when you're in interpreted code. > > Yes, but we’re talking about threads vs QThread - I already ruled out the > python multiprocessing module due to the data copy issue. You are correct > that the GIL only matters when you’re in interpreted code, but given the > behavior I’m seeing, I have to assume my function *is* interpreted code - > that is, the time intensive portions are not calling C libraries. Otherwise > running the function in a separate thread would work to keep the GUI > responsive. > > I did try using a QThread - with the same result as using a python thread. > The GUI freezes while the function is running. As I stated before, I can only > assume this is due to the GIL. And in case there is any question about if I > used QThreads correctly or not, here is the code I used to start the thread: > > thread = ResultsThread(self) > thread.resultsReady.connect(self._on_results_ready) > thread.start() > > ResultsThread is, of course, a QThread subclass in which I re-implemented the > run() function to do my calculations. > > As a further test, I started another thread that just spit out the “current” > time (as per time.time()) every .2 seconds. What I’m seeing is that under > normal operation, this other thread outputs as expected every (approximately) > .2 seconds. However, while the QThread (or python thread) is running, this > other thread “stutters”. This indicates that while the QThread operation > doesn’t block other threads completely, there are a number of operations > taking place in it that *DO* block other threads for a noticeable length of > time, causing the next iteration of my timer loop to be delayed. Such > blocking would obviously apply to the main GUI thread as well. > > So yes, running in a QThread blocks the main GUI thread the same as running > in a python thread does. > --- > 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 > > > > > > > Sent: Thursday, December 05, 2019 at 9:42 AM > > From: "Israel Brewster" <ijbrews...@alaska.edu> > > To: "Kerby Geffrard" <kerby.geffr...@autodesk.com> > > Cc: "pyside@qt-project.org" <pyside@qt-project.org> > > Subject: Re: [PySide] Keeping GUI responsive > > > > On Dec 4, 2019, at 4:53 PM, Kerby Geffrard <kerby.geffr...@autodesk.com > > <mailto:kerby.geffr...@autodesk.com>> wrote: > > > > I think you can try to use a QThread for this. > > > > I was under the impression that QThreads had the same limitations that > > regular python threads had, but I’ll give it a shot. The need to subclass > > QThread rather than simply being able to execute a function complicates > > things however - I have to make sure that said subclass has access to all > > the original class members it needs. > > --- > > 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 > > > > > > Le 4 déc. 2019 à 18:41, Israel Brewster <ijbrews...@alaska.edu > > <mailto:ijbrews...@alaska.edu>> a écrit : > > > > I know this is a FAQ, however I haven’t been able to make any of the > > standard answers work for me. Here’s the situation: > > > > - using PySide2 5.12.2 > > - I have an object (QMainWindow subclass) that contains most of the code > > for my application > > - One of the functions that runs in response to user input takes around 2 > > seconds to run. The GUI obviously freezes during this time (BAD!) > > - Said function needs to access and modify several large variables (pandas > > data frames) from the main object > > > > So here’s the problem: If I run this function as a separate (python) > > thread, that doesn’t help - the GUI is still frozen. I’m thinking this is > > due to the GIL, but I could be wrong about that. Running under the > > multiprocessing module, however, doesn’t appear to be an option due to the > > number and size of the data structures that the function needs to modify, > > and if I try just to see what happens, the process actually crashes. > > > > So what are my options here? How can I keep the GUI responsive while this > > function runs, without being able to spin it off as a separate process? Or > > is the only option going to be to completely rip apart the function and try > > to re-build it in such a way that it can, somehow, still access the memory > > from the main thread, while doing the processing in a separate function? > > --- > > 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 > > _______________________________________________ > > PySide mailing list > > PySide@qt-project.org <mailto:PySide@qt-project.org> > > https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.qt-2Dproject.org_listinfo_pyside&d=DwIGaQ&c=76Q6Tcqc-t2x0ciWn7KFdCiqt6IQ7a_IF9uzNzd_2pA&r=Sh-EhW_r32FEgrsAfK3Hc0du2ebOZ7PrbchABO_xtMo&m=r4Ron7tNrQN9BNhzXVlsKvYoyWrnjjOzLwALVV_CgnA&s=T2UjSQWTnYFAfFbfdTlMgLZnfC1dlXhNy1SmPijkWbs&e= > > > > <https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.qt-2Dproject.org_listinfo_pyside&d=DwIGaQ&c=76Q6Tcqc-t2x0ciWn7KFdCiqt6IQ7a_IF9uzNzd_2pA&r=Sh-EhW_r32FEgrsAfK3Hc0du2ebOZ7PrbchABO_xtMo&m=r4Ron7tNrQN9BNhzXVlsKvYoyWrnjjOzLwALVV_CgnA&s=T2UjSQWTnYFAfFbfdTlMgLZnfC1dlXhNy1SmPijkWbs&e=> > > _______________________________________________ PySide mailing list > > PySide@qt-project.org https://lists.qt-project.org/listinfo/pyside > > <https://lists.qt-project.org/listinfo/pyside> > _______________________________________________ PySide mailing list PySide@qt-project.org https://lists.qt-project.org/listinfo/pyside