Im using a thread to import some rows from a csvfile into the database 
(MySQL). 

The problem is that the request closes the connection while the thread is 
inserting records and i have to restart the server in order to clean up the 
hanged thread.

So is there anyway to use DAL with an independent db connection within that 
thread?

Calling mythread.join() works but doesnt release the request until is done 
and some servers like pythonanyqhere has a timeout for each request. 

I cant use the scheduler on my server, it hangs itself after some time and 
i have to restart it manually. Threads looks like the easiest choice and 
subclassing is very convinient to report percentages, statistics and such.

Heres is some pseudocode im using:

import threading, csv

class importcsv(threading.Thread):

    percentage = 0
    total_rows = 0

    def __init__(self, csvfile, has_headers, ...):
        threading.Thread.__init__(self)
        self.name = "user-1"
        self.daemon = False
        self.csvfile = csvfile
        ...

    def run(self):
        rows = ... #extract rows from the file
        self.total_rows = len(rows)

        #process rows
        for i, r in enumerate(rows):
            inserdata = {....} #row converted to dictionary
            db.mytable.insert(**insertdata)
            self.percentage = 100 * (i+1) / total_rows
        db.commit()


@auth.requires_login()
def index()
    threads = [t for t in threading.enumerate() if t.name == "user-%s" % 
auth.user.id]
    running = len(threads)

    if not running:
        #display a form to upload the csv file
        form = SQLFORM.factory(
            #some fields
            #csvfile, has_header, column_separator, ...
        )

        if form.accepted:
            job = importcsv(csvfile, has_headers, ...)
    else:
        #display the percentage done
        percentage = threads[0].percentage
        
    return locals()







-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to