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/1af0256b2beeec62 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/6252b1e9a777ee0a# 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 -~----------~----~----~----~------~----~------~--~---