[PySide] Keeping GUI responsive

Israel Brewster ijbrewster at alaska.edu
Thu Dec 5 15:42:09 CET 2019


> 
> On Dec 4, 2019, at 4:53 PM, Kerby Geffrard <kerby.geffrard at 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 <ijbrewster at 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 at 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= 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20191205/960ff4d0/attachment-0001.html>


More information about the PySide mailing list