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
>>
>> --
>>
>>
>>
>>
>  --
>
>
>
>

-- 



Reply via email to