你好。我有一个应用程序在 VK 中执行对存储过程的查询,在单独的 QThread 线程中加载此数据并将数据放在表中。问题是应用程序莫名其妙的崩溃了,调试什么的,我自己已经尝试在程序代码中改了很多。有趣的是,这种情况会周期性发生:有一天应用程序崩溃了,第二天就没有了(我保存了工作代码,输入了相同的输入数据,但应用程序不再工作)。存储过程发出的 API 请求少于 25 个。还有一件事:应用程序正在工作(大约 9-30% 的工作在 ProgressBar 上完成)。请帮我弄清楚问题是什么。
UPD:我试图在浏览器关闭的情况下运行应用程序,应用程序崩溃了大约 50%。我怀疑这个问题与网络负载有关。
这是此应用程序的代码片段:
def update(self, str1):
str2 = json.loads(str1)
for i in range(0, len(str2['response'])):
self.tablewidget.insertRow(self.tablewidget.rowCount())
print(str2['response'][i]['text'])
self.tablewidget.setItem(self.tablewidget.rowCount()-1, 0, QTableWidgetItem(str2['response'][i]['text']))
def do_(self):
if not(not self.text1.toPlainText() or self.text1.toPlainText().isspace() or not self.text2.toPlainText() or self.text2.toPlainText().isspace()):
if self.progress.value()==100 or self.progress.value()==0:
self.thread = QtCore.QThread(self)
self.my = myClass()
self.my.moveToThread(self.thread)
self.thread.started.connect(self.my.User_find)
self.my.finished.connect(self.thread.quit, QtCore.Qt.BlockingQueuedConnection)
self.my.finished.connect(self.my.deleteLater, QtCore.Qt.BlockingQueuedConnection)
self.thread.finished.connect(self.thread.deleteLater, QtCore.Qt.BlockingQueuedConnection)
self.my.message.connect(self.update, QtCore.Qt.BlockingQueuedConnection)
self.my.sendGlobalVar.connect(self.my.receiveID, QtCore.Qt.DirectConnection)
self.my.sendGlobalVar.emit(self.text1.toPlainText(), self.text2.toPlainText())
self.my.progress.connect(self.progress.setValue)
self.thread.start()
else: self.msg2.exec()
else: self.msg1.exec()
class myClass(QtCore.QObject):
sendGlobalVar = QtCore.pyqtSignal(str, str)
finished = QtCore.pyqtSignal()
message = QtCore.pyqtSignal(str)
progress = QtCore.pyqtSignal(int)
globalVar1 = None
globalVar2 = None
def receiveID(self, txt1, txt2):
global globalVar1
global globalVar2
globalVar1 = txt1
globalVar2 = txt2
@QtCore.pyqtSlot()
def User_find(self):
for f in range(0, 100):
url="https://api.vk.com/method/execute.getCommentsFromPosts?owner_id=%s&user_id=%s&offset=%s&v=5.60&access_token=..." % (globalVar1, globalVar2, f*4)
self.message.emit(requests.get(url).text)
self.progress.emit(f+1)
self.finished.emit()
要显示堆栈跟踪,请添加到
__main__
查看
str1
错误发生时的内容,它不会包含'{ "response": [] }'
您期望的字符串。如果是这样,那么你可以这样做len(str2.get('response', []))