QNetworkReply вызывает segfault
Я пытаюсь написать какой-нибудь API-клиент для приложения на основе PyQt4. И, следуя этой документации, я написал этот код:
from PyQt4 import QtCore, QtNetwork
class API(QtCore.QObject):
def processResponse(self, response):
print 'response'
response.deleteLater()
def processError(self, error):
print 'error'
def authenticate(self, authUrl, login, password):
manager = QtNetwork.QNetworkAccessManager()
request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
reply = manager.get(request)
reply.error.connect(self.processError)
reply.finished.connect(self.processResponse)
return reply
def authenticate2(self, authUrl, login, password):
manager = QtNetwork.QNetworkAccessManager()
request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
self.reply = manager.get(request)
self.reply.error.connect(self.processError)
self.reply.finished.connect(self.processResponse)
return self.reply
p = API()
z = p.authenticate('http://dev.dentv.ru/edda/v1/token/', 'test', 'test')
print z
print z.isFinished()
Первая проблема - ни один из сигналов (processResponse
, processError
) вызывается (даже если я объявляю соединение с self.connect(.., SIGNAL(..), ..)
). Вторая проблема заключается в том, что этот код вызывает ошибку в последней строке, когда я звоню isFinished
метод. Если я вызываю этот метод внутри метода API, он работает правильно.
Я думал, что причина в том, что reply
объект собирают мусор или как-то удаляют, поэтому я написал вторую версию authenticate
метод с явным reply
привязка к переменной объекта. Это также вызывает segfault.
В чем проблема с моим кодом?
1 ответ
Я идиот:(
Проблема была решена путем связывания manager
переменная объекта, а не reply
, Менеджер был мусор (или что-то в этом роде).