In general processing almost a gig of CSV data is going to take a measurable amount of time. It's simply unavoidable.
I process similar size CSV files and I have found the Scheduler to be the ideal solution. I don't actually care that much how long it takes -- I just want my website to remain responsive while it loads. This is exactly why the scheduler exists, to fork something long-running to another process so your site is unaffected. And it truly is another process -- not a thread. If you have a quad-core you can support a whale of a lot of processing using the scheduler.
I built in a little "messaging" table so when my scheduler is done it sends a message to me and I can see the results. It's a marvelous piece of work and one of the best features of web2py.
-- Joe