thanks for advice, but already have a working solution. > It's still not clear why the scheduler does not fit your needs. I do not need to schedule tasks. I just need to react to form submissions so having the scheduler middleman is not necessary in this case.
On Fri, Nov 9, 2012 at 12:59 AM, Michele Comitini < michele.comit...@gmail.com> wrote: > It's still not clear why the scheduler does not fit your needs. Anyway > what you want seems to need should be a *deamon*. > You can launch it in the middle of the request/response cycle or from the > scheduler it will detach from the parent (the launching) process and work > in the background. > > pip install python-daemon > > http://pypi.python.org/pypi/python-daemon/ > > > mic > > > 2012/11/7 Richard Baron Penman <richar...@gmail.com> > >> OK, got a solution that has been working well for last few days now. >> >> I made 2 mistakes previously that caused me trouble: >> >> 1) The child processes are independent. I had used ctrl+c to kill >> web2py, which was passed on to the child processes. >> When kill -9 [web2py PID] was used the child processes continued fine. >> >> 2) The parent process can kill child processes but they became zombie >> processes until the parent process dies. >> Originally I was checking /proc/PID for process existence so seemed to >> always exist. Now using the psutil package, which has some useful >> cross platform features. Much better than parsing output of ps! >> >> >> The scheduler was not helpful for this use case. >> >> Here are some functions I used in case they help others: >> >> >> def exists(pid): >> """Return whether the process exists""" >> try: >> p = psutil.Process(pid) >> if p.status == psutil.STATUS_ZOMBIE: >> return False # ignore zombie processes >> else: >> return True >> except psutil.NoSuchProcess: >> return False >> >> >> def stop(pid): >> """Try to kill this process, first with interrupt and then kill signal >> """ >> success = True >> try: >> p = psutil.Process(pid) >> p.terminate() >> time.sleep(1) # if don't delay here a bit then exists() call >> will usually fail - better way? >> if exists(pid): >> # was not able to terminate process so try kill >> p.kill() >> time.sleep(1) >> if exists(pid): >> success = False >> except psutil.NoSuchProcess: >> pass >> return success >> >> -- >> >> >> >> > -- > > > > --