start function in new process

Martin P. Hellwig martin.hellwig at dcuktec.org
Fri Mar 5 15:40:55 EST 2010


On 03/05/10 20:09, wongjoekmeu at yahoo.com wrote:
> On 5 mrt, 21:02, "Martin P. Hellwig"<martin.hell... at dcuktec.org>
> wrote:
>> On 03/05/10 19:45, wongjoek... at yahoo.com wrote:
>>
>>
>>
>>> On 5 mrt, 20:40, "Martin P. Hellwig"<martin.hell... at dcuktec.org>
>>> wrote:
>>>> On 03/05/10 19:21, wongjoek... at yahoo.com wrote:
>>>> <cut os.fork problem>
>>>> Any specific reason why threading.Thread or multiprocessing is not
>>>> suitable to solve your problem?
>>
>>>> --
>>>> mph
>>
>>> Because I got a memory leak in my function f(). It uses scipy, numpy,
>>> pylab, and I am not planning to solve the memory leak because its too
>>> complicated. So I thought of just calling the function then when it is
>>> finished the process is gone and all memory is released. With
>>> threading I don't think I would solve this problem. I am not sure
>>> though.
>>
>> I would be surprised if you can't do the same with
>> subprocess/multiprocessing, since you seem to know how to identify the
>> memory leak it shouldn't be a problem scripting out a test to see if it
>> works this way. I would be interested though in your findings.
>>
>> --
>> mph
>
> I can't use multiprocessing module since it comes only with python 2.6
> and I am bound to python2.4. But subprocess does exist in python2.4,
> but the question now is, how do I achieve that ? Any example ?

Sure, for example if I want to check the openssl version (didn't specify 
I need to provide a useful example :-)

I would normally do on the command line:
[martin at aspire8930 /usr/home/martin/Desktop]$ /usr/bin/openssl version
OpenSSL 0.9.8k 25 Mar 2009

The python subprocess equivalent is:
[martin at aspire8930 /usr/home/martin/Desktop]$ python
Python 2.6.4 (r264:75706, Jan 31 2010, 20:52:16)
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
 >>> import subprocess as _sp
 >>> ssl_version = _sp.Popen(['/usr/bin/openssl', 'version'], 
stdout=_sp.PIPE)
 >>> print(ssl_version.stdout.readlines())
['OpenSSL 0.9.8k 25 Mar 2009\n']
 >>> quit()
[martin at aspire8930 /usr/home/martin/Desktop]$

If you get any error in the Popen part, you probably did not use the 
full path or an illegal parameter.

If you get a long wait in the readlines part, this usually means that 
there is either nothing written to stdout or something is still being 
written (I am not sure about this part though, it has been a while).

hth
-- 
mph



More information about the Python-list mailing list