I am using pycuda to compute holograms for an optical trapping
application that uses PyQt4 for a GUI front end.  I would like to move
the pycuda computation into a QThread to keep the GUI responsive.

Is there an up-to-date working example of "the right way" to move a
pycuda computational object into a QThread using moveToThread?
Despite much searching, I have not turned up sample code.  The
pycuda FAQ addresses subclassing threads, but not moveToThread
method of QThread.

The following minimal example of a "do nothing" background
object appears to work correctly.  It creates an object,
moves it into a thread, creates a pycuda context for the object in
its thread, and then stops the object by quitting the thread.
Before I dig deeper, can anyone confirm that this is the right approach?
Or am I missing something

=== snip for minimal example ===

from PyQt4 import QtCore
import pycuda.driver as cuda

cuda.init()

class ComputeObject(QtCore.QObject):

    def __init__(self, deviceID=0):
        super(ComputeObject, self).__init__()
        self.deviceID = deviceID

    @QtCore.pyqtSlot()
    def start(self):
        print('starting')
        self.device = cuda.Device(self.deviceID)
        self.context = self.device.make_context()

    @QtCore.pyqtSlot()
    def stop(self):
        print('stopping')
        self.context.pop()
        self.context = None

if __name__ == '__main__':
    from PyQt4.QtGui import QApplication
    import sys

    app = QApplication(sys.argv)
    obj = ComputeObject()

    thread = QtCore.QThread()
    thread.start()
    obj.moveToThread(thread)
    thread.started.connect(obj.start)
    thread.finished.connect(obj.stop)

    thread.quit()
    thread.wait()

-- 
*David G. Grier <http://physics.nyu.edu/grierlab/>*
Department of of Physics <http://physics.nyu.edu/> and Center for Soft
Matter Research <http://csmr.as.nyu.edu/>
New York University <http://nyu.edu/>
726 Broadway, room 873, New York, NY 10003 <https://goo.gl/maps/Tbs7JatcW4y>
_______________________________________________
PyCUDA mailing list
[email protected]
https://lists.tiker.net/listinfo/pycuda

Reply via email to