Hi Thiago,

thanks for your quick reply. I will try and give some more context:
I use the python requests module inside my PySide app to post requests to a website. Some of those requests return a lot of data that I need to parse to be able to show progress, other requests are file downloads that I need progress bars for as they stream onto disk. I had tried to not use threads and use QApplication.processEvents() for each data chunk downloaded, but that made the download about 4-5 times slower. Introducing threading made a huge difference.

My app can download a list of files at the same time. Depending on the situation and the user request, the list of files to be downloaded can happen asynchronously, in other situations they need to be downloaded one after the other.

>>All I can tell you is that you don't need to do what you're trying to do, since you don't need threads in the first place. If I can avoid threads to do the above I would be more than happy to adjust and get rid of them again, but I haven't managed to find a non-threaded approach that doesn't slow down the download significantly.

Cheers,
frank

On 18/01/17 6:26 PM, Thiago Macieira wrote:
On quarta-feira, 18 de janeiro de 2017 17:21:46 PST Frank Rueter | OHUfx
wrote:
Hi,

I got another threading question for the pros out there:

In  my current application I am using QThread objects and
QObject.moveToThread() to enable my GUI to download multiple files while
updating progress bars in the main event loop. This is the respective
As usual, the usual disclaimer: you do not need threads to do networking or
file I/O. The combined overhead of the networking I/O and saving of the files is
unlikely to overwhelm the event loop to the point that the progress bar can't
update smoothly.

I'm not saying impossible, but it's unlikely.

snippet of code:
          self.worker = MyClass()
          self.workerThread = QtCore.QThread()
          self.worker.moveToThread(self.workerThread)

The trouble is when the user wants to download multiple files at once.
In my current implementation that all works fine and I see multiple
progress bars do there thing.
However, there are cases when I need to force the download threads to be
synchronous. I had hoped that I can use QThreadPool with QThreads, but
turns out I need QRunnables in this case, and those don't have the same
signals as QThread.
Why do you need to force them to be synchronous? And synchronous with what?
With each other? Or do you mean sync() in the file saving?

Finally, what does being synchronous have to do with signals?

So my question is:
Is there a good way to use QThreads in a queue which is controlled by
the main thread, or should I re-write my code and subclass QRunnable to
add the signals I need (i.e. the ones that QThread has by default)?
The whole point of QThread is that the code it runs is independent of anything
else. Only the OS scheduler decides when it's time to run it or suspend it.

In the latter case I guess I'd have to inherit from both QObject and
QRunnable, is this ok?
Right.

But we still don't understand what you're trying to do. All I can tell you is
that you don't need to do what you're trying to do, since you don't need
threads in the first place.


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to