Sorry for the late response, been AFK for two weeks. As soon as I catch my breath I will post the latest iteration of my patch in the forum so people could comment/test it a bit before it gets included in the trunk. For documentation, currently I can post the emails we exchanged (if that's ok with you), I think after reading that it should be fairly clear how it works and how it can/should be used.
On Jan 4, 3:11 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > Mind that: > 1) db cannot be safely passed from one thread to another (although > probably ok in your example) > 2) long running threads have a timeout that depands on the web server > configuration > > There is an excellent patch from achipa about support for web2y cron > jobs. > It has not been included yet because I have been slow. > > Massimo > > On Jan 4, 7:56 am, Iceberg <iceb...@21cn.com> wrote: > > > Hi everyone, > > > I am writing to share my attempt of "Using threads to do re-occuring > > jobs", and seek your advice. > > > Basically, I hope to insert some records into a table automatically > > every few minutes. This looks same as Voltron did in his post "Re- > > occuring jobs". > > > > http://groups.google.com/group/web2py/browse_thread/thread/1af0256b2b... > > > Also, I noticed Achipa's excellent advice about what shall be careful. > > http://groups.google.com/group/web2py/msg/e39821790e4b1973 > > as well as the discussion in this post "Multiple Threading": > > > > http://groups.google.com/group/web2py/browse_thread/thread/6252b1e9a7... > > Since I plan to use a single web2py (no multi WSGI process), and the > > inserting record job should not take long time, so I decide to try > > threading anyway. > > > I came out with this code snippet, attached at the end of this post. > > It is still very rough, but it seems my idea works. The re-occuring > > job will be triggered by separate thread, can access same SQLite db > > (via main thread, I believe), and other normal requests can be served > > during the time. > > > I am writing to seek advice. At least I remember Massimo mentioned > > "You should not create threads manually by using thread and threading > > modules" in his post: > > http://groups.google.com/group/web2py/msg/9bf44919adfdbf45 > > So, did I miss something important? Say, will this trick cause > > infinite threads to be created then eventually halt the main web2py > > process? > > > My model.py: > > db=SQLDB('sqlite://storage.db') > > db.define_table('activity',SQLField('whatever','text')) > > > All in my controller.py: > > > def __stamp(): # do the real job > > import datetime, logging > > logging.warn('stamp() is called at %s' % datetime.datetime.now()) > > rows=db(db.activity.id==1).select(db.activity.ALL) # I can access > > SQLite DB in "multithread" world > > > def secretEntrance(): # should be protected by only allowing access > > from localhost > > return __stamp() > > > def __trigger(): # Here comes the magic > > import urllib,threading > > urllib.urlopen('http://%s%s' % ( > > request.env.http_host, > > URL(r=request,f='secretEntrance')) > > ).read() # Use this trick to avoid accessing DB by multi > > thread ;-) > > threading.Timer(5,__trigger).start() # infinite loop > > > def kickoff(): # This is the main entrance. You still need a initial > > nudge to trigger all the magic > > __trigger() > > return 'started' > > > def usual_action(): # Just to show that normal requests are served as > > usual > > return {'foo':'bar'} > > > Sincerely, > > Iceberg, 2009-Jan-04, 20:54(PM), Sun --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---