Hello,

I am using the web2py scheduler to run a task to monitor a directory. 
Here's some code describing what I'm doing:

def get_configured_logger():

    logger = logging.getLogger("ss_server")

    if (len(logger.handlers) == 0):

        handler = logging.handlers.RotatingFileHandler("/path/to/log/log.txt
", maxBytes=1024*1024*10, backupCount=2)

        handler.setLevel(logging.DEBUG)

        logger.addHandler(handler)

        logger.setLevel(logging.DEBUG)

        logger.debug("Logger created")

    return logger


def write_to_log(s):

    l = get_configured_logger()

    l.info(s)

...


def searchForFiles():

    print("serach for files")

    write_to_log("searching for files")

    print os.getcwd()

    write_to_log("creating watermark")

    watermark_opaque = Image.open('./path/to/image/watermark.png')

    watermark = reduce_opacity(watermark_opaque, 0.7)

    write_to_log("done creating watermark")

    write_to_log("globbing files")

    files = glob.glob(INPUT_DIR + "*.jpg")

    write_to_log("files globbed")

    for filename in files:

        write_to_log("getting basename for " + filename)

        filename = os.path.basename(filename)

        write_to_log("splitting filename")

        parts = filename.split('-')

        write_to_log("checking filename")

        if (len(parts) == 6):

            try:

                print("processing file: " + filename)

                write_to_log("processing file: " + filename)

                im = Image.open(INPUT_DIR + filename)

                write_to_log("adding watermark")

                im.paste(watermark,(im.size[0] - watermark.size[0] - 20
,im.size[1] - watermark.size[1] - 20),watermark)

                im.save(INPUT_DIR + filename, "JPEG", quality=100)

                write_to_log("added watermark")

                write_to_log("creating scaled images")

                createScaledImage(64, INPUT_DIR + filename, THUMBS_DIR)

                createScaledImage(600, INPUT_DIR + filename, SMALL_DIR)

                write_to_log("done creating scaled images")

                pic_id = processFile(filename)

                print("processed file successfully")

                write_to_log("processed file successfully")

                write_to_log("renaming files")

                shutil.move(INPUT_DIR + filename, PROCESSED_DIR + "%d" % 
pic_id + ".jpg")

                shutil.move(THUMBS_DIR + filename, THUMBS_DIR + "%d" % 
pic_id + ".jpg")

                shutil.move(SMALL_DIR + filename, SMALL_DIR + "%d" % pic_id 
+ ".jpg")

                write_to_log("done renaming files")

            except IOError:

                #this is likely due to a partial file, so let it finish 
writing and try

                #again next time

                print("IO Error")

                write_to_log("IO Error")

                pass

            except:

                etype, eval, etb = sys.exc_info()

                print("error processing file: ", eval.message)

                write_to_log("error: " + eval.message)

                shutil.move(INPUT_DIR + filename, ERRORS_DIR + filename)

            write_to_log("end of loop")

                    

    write_to_log("ending function")

    return "success"

                

myscheduler = Scheduler(db, tasks=dict(searchForFiles=searchForFiles))


I have a task inserted into my scheduler_task table with the following 
properties:
function name: searchForFiles
repeats: 0
timeout: 240
sync output: 15

Everything works fine except I get random TIMEOUT runs 1-2 times per day. 
Furthermore these runs will happen in the middle of the night when nothing 
has been added to the directory. When a TIMEOUT happens, the last line in 
my log file is "ending function". Also, there is no output at all in the 
scheduler_run record for the run that was marked as TIMEOUT. 

For these reasons I do not think the timeout is happening inside my code, I 
believe it is somehow happening between when the scheduler tries to pick up 
task and when it calls my function. I could totally be wrong though. The 
reason I have added in such granular logging is to find exactly where the 
timeout was occurring so I could fix it but I cannot find the problem 
anywhere.

Please let me know if anyone has any ideas on what could be causing this 
issue. Any help would be very much appreciated. If I cannot fix it I will 
have to find a different solution for directory monitoring and not use the 
scheduler.

Thanks again,
Mike

-- 



Reply via email to