내 응용 프로그램에서, 내가 백엔드와 통신 QThread 책임을 사용자 정의를 가지고 QTimer을 사용하고,() 메소드 실행에서 URL 및 데이터와 유틸리티 함수를 호출하는 데 실패 유틸리티 메소드 (들)에서, 나는 응답을 파싱하고, 궁극적으로 위의 스레드 변수 final_desired_content에 원하는 정보를 전달하면서, HTTP POST를 만들고있다. 내가 다시 정보를 전달하기 전에, 나는 반환하지 않으려 좀 더 많은 정보를 분석하고, 그리고 SomeClass 싱글 인스턴스에 저장하고 싶은 다음 BE 내에 연락 여러 스레드가있을 수 있기 때문에QThread가 제대로
def some_utility_method(...):
...
return response_parsing(response)
def response_parsing(response):
...
some_file.SomeClass.instance().setNewData(otherData)
return mainParsedData
이 성공적으로 한번 업데이트
class SomeClass(QtCore.QObject):
_instance = None
@classmethod
def instance(klass):
if not klass._instance:
klass._instance = SomeClass()
return klass._instance
def __init__(self):
QtCore.QObject.__init__(self)
self._recentlyUpdatedTimer = QtCore.QTimer()
self._recentlyUpdatedTimer.setSingleShot(True)
self._recentlyUpdatedTimer.timeout.connect(self._setOkToUpdateCB)
self._storedData = None
self._allowUpdate = True
def _setOkToUpdateCB(self):
self._allowUpdate = True
def setNewData(self, newData):
if self._allowUpdate:
print "UPDATING!"
self._allowUpdate = False
self._storedData = newData
self._recentlyUpdatedTimer.start(<some_time>)
else:
print "BLOCKED!" # ok to ignore newData
문제가되는 : 전에 통과 한 데이터의 쓰기를 방지하고자하는 (특히 응용 프로그램 시작시) 몇 초 (우리는 무시 데이터가 버려진 것을 그것은 괜찮습니다) 두 번째 업데이트가 성공한 후에이 오류가 발생합니다. QObject :: startTimer : 다른 스레드에서 타이머를 시작할 수 없습니다.
스레드에 대해 알고 있고 읽은 것부터 QThread의 run()은 주 스레드에서 무슨 일이 일어 났는지 알지 못하는 또 다른 스레드입니다. 디버깅 중, 타이머가 singleShot으로 설정되어 있어도 타이머가 실행 중임이 나타납니다.
내가 어떤 제안 :