3 ms·
Use `concurrent.futures.ThreadPoolExecutor` to submit jobs, and `Future.add_done_callback` to flip the transcription field when the job completes.
by realreality 1y ago
Use `concurrent.futures.ThreadPoolExecutor` to submit jobs, and `Future.add_done_callback` to flip the transcription field when the job completes.
- ptx 1y agoAlthough keep in mind that the callback will be "called in a thread belonging to the process" (say the docs), presumably some thread that is not the UI thread. So the callback needs to post an event to the UI thread's event queue, where it can be picked up by the UI thread's event loop and only then perform the UI updates. I don't know how that's done in Pyside, though. I couldn't find a clear example. You might have to use a QThread instead to handle it.
- dotancohen 1y agoThank you. Perhaps I should trigger the transcription thread from the UI thread, then? It is a UI button that initiates it after all.
- ptx 1y agoThe tricky part is coming back onto the UI thread when the background work finishes. Your transcription thread has to somehow trigger the UI work to be done on the UI thread. It seems the way to do it in Qt is with signals and slots, emitting a signal from your QThread and binding it to a slot in the UI thread, making sure to specify a "queued connection" [1]. There's also a lower-level postEvent method [2] but people disagree [3] on whether that's OK to call from a regular Python thread or has to be called from a QThread. So I would try doing it with Qt's thread classes, not with concurrent.futures. [1] https://doc.qt.io/qt-5/threads-synchronizing.html#high-level-event-qu;eues https://doc.qt.io/qt-5/threads-synchronizing.html#high-level... [2] https://doc.qt.io/qt-6/qcoreapplication.html#postEvent https://doc.qt.io/qt-6/qcoreapplication.html#postEvent [3] https://www.mail-archive.com/pyqt@riverbankcomputing.com/msg16066.html https://www.mail-archive.com/pyqt@riverbankcomputing.com/msg...
- dotancohen 1y agoTerrific, thank you. You've put me on the right track.
- dotancohen 1y agoThank you.