Frage zu threading.Timer

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
av_jui
User
Beiträge: 25
Registriert: Samstag 4. Mai 2013, 12:45

Hallo

Ich schon wieder. Ich habe hier folgenden Code.

Code: Alles auswählen

	def _BackgroundCheck(self):

		self.SonosBackground= threading.Timer(5.0, self._UpdateSonosTable)
		self.SonosBackground.start()
		log('SONOS background update thread was started', 'debug') 
und hier das dazugehörige _UpdateSonosTable

Code: Alles auswählen

	def _UpdateSonosTable(self):

		try:
			self.devices = self._GetTrackInfo()
		
			self.connection = sqlite3.connect(self.SONOS_DB, timeout=20)
			self.cursor = self.connection.cursor()

			for key,device in self.devices.iteritems():

				self.title = Replacesq(device[3])
				self.albumname = Replacesq(device[4])
				self.artist = Replacesq(device[5])
				
		
				sql = "UPDATE '%s' SET DeviceIP='%s', DeviceName='%s', Title='%s', AlbumName='%s', Artist='%s', AlbumArt='%s', Duration='%s', Position='%s', Volume='%s' WHERE OrderID=0"% (device[0].upper(), device[1], device[0], self.title , self.albumname, self.artist, device[2], device[6], device[7], device[8])
				self.cursor.execute(sql)
				self.connection.commit()
	
			self.cursor.close()
			log('Sonos table was updatet!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!', 'debug')

		except Exception,e:
			log(e, 'error')	
Soweit so gut. Nur das Problem ist das das der Code nur einmal ausgeführt wird und nicht wie gewünscht alle 5 Sekunden.
Hat jemand eine Idee dazu.
Hier ist noch die komplette Datei.

Danke schon mal im voraus
Zuletzt geändert von Anonymous am Montag 13. Mai 2013, 15:50, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Das haben Timer halt so an sich, die führen den Code nur genau einmal nach der abgelaufenen Zeit aus. Erstelle also entweder einen neuen Timer, wenn die übergebene Funktion aufgerufen wurde oder Löse das gleich in einem eigenen Thread.
Das Leben ist wie ein Tennisball.
av_jui
User
Beiträge: 25
Registriert: Samstag 4. Mai 2013, 12:45

EyDu hat geschrieben:Hallo.

Das haben Timer halt so an sich, die führen den Code nur genau einmal nach der abgelaufenen Zeit aus. Erstelle also entweder einen neuen Timer, wenn die übergebene Funktion aufgerufen wurde oder Löse das gleich in einem eigenen Thread.
A ok dann hab ich das falsch verstanden indem Fall gehe ich den weg mit einem eigenem Thread. Danke
Antworten