Subversion Repositories SE.SVN

Rev

Blame | Last modification | View Log | RSS feed


import threading
import dbcontrol
import time


class Jobber(threading.Thread):

        
#       sql_nextjob = """SELECT * FROM %s 
#                                               WHERE sched<NOW() AND (NOT (sched IS NULL)) ORDER BY 
#                                               sched ASC LIMIT 1 FOR UPDATE """ % (self.db_table,)


        def get_selectjob_sql(self):
                return ""

        def get_markjob_sql(self,row):
                return ""




        def get_nextjob(self):

                db = self.db_pool.get_conn()

                try:
                        cursor=db.cursor()
                        while True:
                                try:
                                        (sql,p) = self.get_selectjob_sql()
                                        cursor.execute(sql,p)
                                        break
                                except Exception, e:
                                        if type(e) != dbcontrol.pgdb.OperationalError:
                                                raise e
                                        db.rollback()
                                        time.sleep(0.5)



                        row = cursor.fetchone()
                        if row != None:
                                row =dbcontrol.row_to_dict(cursor,row)
                                (sql,p) = self.get_markjob_sql(row)
#                               sql = "UPDATE %s SET sched=NULL WHERE url=%s" % (self.db_table,"%s")
                                cursor.execute(sql,p)
        
                        db.commit()
                        return row

                finally:
                        cursor.close()
                        self.db_pool.free_conn(db)



        def process_nextjob(self):
                return False
        
        def run(self):
                while True:
                        rc = self.process_nextjob()
                        if rc == False:
                                time.sleep(1)
                        else:   
                                time.sleep(0.01)

                        # return if the main thread has finished
                        en = threading.enumerate()
                        if not en[0].is_alive():
                                return






                row = self.get_nextjob()