Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Asynchronous Remote Labrad Connections #367

Open
mserlin opened this issue Aug 28, 2019 · 0 comments
Open

Asynchronous Remote Labrad Connections #367

mserlin opened this issue Aug 28, 2019 · 0 comments

Comments

@mserlin
Copy link

mserlin commented Aug 28, 2019

I'm am developing a GUI using pyqt4 and labrad to perform SPM experiments. The GUI has grown substantially over the past couple years and recently has started crashing very suddenly, without throwing error messages of any kind.

When an asynchronous local labrad connection is created, everything works as intended. However, when a remote asynchronous connection is created, the software no longer closes cleanly. Disconnecting the remote labrad connection prior to closing the software does not fix it. I'm suspicious that this is an indication of the remote connection not integrating properly with twisted's reactor somehow, and might be responsible for the sudden software crashes.

I am using pylabrad version 0.97.2, twisted version 17.5.0, qt4reactor 1.6, and pyqt4. Below I attached a very simple GUI that demonstrates the problem on my computer.

Does anyone have any ideas what could be causing this? Is there a different, more proper way to close a labrad connection? Am I doing anything obviously incorrectly in terms of starting the asynchronous connections?

Any help or insight would be appreciated. Thanks!

import sys
from PyQt4 import Qt, QtGui, QtCore
from twisted.internet.defer import inlineCallbacks, Deferred

class MainWindow(QtGui.QMainWindow):
    def __init__(self, reactor, parent=None):
        super(MainWindow, self).__init__(parent)
        self.reactor = reactor
        self.resize(250,250)
        self.move(300,300)

        btn = QtGui.QPushButton('Connect Local', self)
        btn.resize(QtCore.QSize(150,23))
        btn.move(50, 50)
        
        btn2 = QtGui.QPushButton('Connect Remote', self)
        btn2.resize(QtCore.QSize(150,23))
        btn2.move(50, 100)
        
        btn3 = QtGui.QPushButton('Disconnect Remote', self)
        btn3.resize(QtCore.QSize(150,23))
        btn3.move(50, 150)
        
        btn.clicked.connect(lambda: self.connectLocalLabrad())
        btn2.clicked.connect(lambda: self.connectRemoteLabrad())
        btn3.clicked.connect(lambda: self.disconnectRemoteLabrad())
        
    @inlineCallbacks
    def connectLocalLabrad(self):
        from labrad.wrappers import connectAsync
        try:
            #Connects to the manager on the local computer. 
            self.cxn = yield connectAsync(host = '127.0.0.1', password = 'pass')
            
            self.dv = self.cxn.data_vault
            
            print 'Connected locally'
        except:
            print 'Local connection failed'
            
    @inlineCallbacks
    def connectRemoteLabrad(self):
        from labrad.wrappers import connectAsync
        try:
            self.cxnr = yield connectAsync(host = '4KMonitor', password = 'pass')
            print 'Connected remotely'
        except:
            print 'Remote connection failed'
        
    @inlineCallbacks
    def disconnectRemoteLabrad(self):
        from labrad.wrappers import connectAsync
        try:
            yield self.cxnr.disconnect()
            print 'Disconnected remotely'
        except:
            print 'Remote disconnection failed'
        
if __name__=="__main__":
    import qt4reactor
    app = QtGui.QApplication(sys.argv)
    qt4reactor.install()
    from twisted.internet import reactor
    window = MainWindow(reactor)
    window.show()
    reactor.runReturn()
    sys.exit(app.exec_())
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant