Seite 1 von 1

Frage zu threading.Timer

Verfasst: Montag 13. Mai 2013, 15:43
von av_jui
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

Re: Frage zu threading.Timer

Verfasst: Montag 13. Mai 2013, 15:51
von EyDu
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.

Re: Frage zu threading.Timer

Verfasst: Montag 13. Mai 2013, 16:01
von av_jui
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