Forums

write the database while using the timer function

Hi all,

I need your help, I'm having a trouble with writing the database at the same time when I'm using the time.sleep function.

I can be able to create the database table without have any problem, but when I use the time.sleep function, it will stop writing the data into the database.

When I use this code:

       import time
       import threading

       #DOWNLOAD THE XML SOURCE HERE
       url = ADDON.getSetting('allchannel.url')
       req = urllib2.Request(url)
       response = urllib2.urlopen(req)
       data = response.read()
       response.close()
       profilePath = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide',''))
       self.getControl(4202).setLabel("1%")


       if os.path.exists(profilePath):
          profilePath = profilePath + 'source.db'
          con = database.connect(profilePath)
          cur = con.cursor()
          cur.execute('CREATE TABLE programs(channel TEXT, title TEXT, start_date TIMESTAMP, stop_date TIMESTAMP, description TEXT)')
          con.commit()
          con.close
          tv_elem = ElementTree.parse(StringIO.StringIO(data)).getroot()
          profilePath = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', ''))
          profilePath = profilePath + 'source.db'
          con = sqlite3.connect(profilePath)
          cur = con.cursor()
          channels = OrderedDict()

          # Get the loaded data
          for channel in tv_elem.findall('channel'):
              channel_name = channel.find('display-name').text
              for program in channel.findall('programme'):
                  title = program.find('title').text
                  start_time = program.get("start")
                  stop_time = program.get("stop")
                  cur.execute("INSERT INTO programs(channel, title, start_date, stop_date)" + " VALUES(?, ?, ?, ?)", [channel_name, title, start_time, stop_time])
                  con.commit()
                  con.close

                  time.sleep(2)
                  #Stop the timer and set the timer again for 2 seconds
                  self.getControl(4202).setLabel("8%")

                  time.sleep(2)
                  #Stop the timer and set the timer again for another 2 seconds
                  self.getControl(4202).setLabel("16%")

                  time.sleep(2)
                  #Stop the timer and set the timer again for another 2 seconds
                  self.getControl(4202).setLabel("24%")

So when I try this without using the time.sleep function:

       # Get the loaded data
       for channel in tv_elem.findall('channel'):
           channel_name = channel.find('display-name').text
           for program in channel.findall('programme'):
               title = program.find('title').text
               start_time = program.get("start")
               stop_time = program.get("stop")
               cur.execute("INSERT INTO programs(channel, title, start_date, stop_date)" + " VALUES(?, ?, ?, ?)", [channel_name, title, start_time, stop_time])
               con.commit()
               con.close

It will allow me to write the data into the database if I use without the time.sleep function. I want to use the time.sleep function or the timer, because I want to update the string in the setLabel function in every 2 seconds while I'm writing the data into the database. I tried to use the while loop, it will freeze the application that I'm running on.

Can you please tell me how I can write the data into the database at the same time when I'm using the time.sleep or the timer function?

Hi there -- where is the code running? On a local machine or on PythonAnywhere?