run a function in another processor in python

Astan Chee astan.chee at gmail.com
Thu Dec 9 08:03:40 EST 2010


Thanks but I'm having trouble with that module too. Currently what I
have is something like this:

import sys
import os
import multiprocessing

import time

def functionTester(num):
    return ((num+2)/(num-2))**2

num_args = [61,62,33,7,12,16,19,35,36,37,38,55,56,57,63]

max_result = 0

start = time.time()

num_processes = multiprocessing.cpu_count()

threads = []
len_stas = len(num_args)

for list_item in num_args:
    if len(threads) < num_processes:
        p = multiprocessing.Process(target=functionTester,args=[list_item])
        p.start()
        print p, p.is_alive()
        threads.append(p)
    else:
        for thread in threads:
            if not thread.is_alive():
                threads.remove(thread)

print "Result " + str(max_result)
end = time.time()
elapsed= end - start
print "Took", elapsed, "seconds to execute"

But it doesn't give me any return data. It also spawns an infinite
number of (sub)processes that crashes my machine. What am I doing
wrong here?

On 12/9/10, Jean-Michel Pichavant <jeanmichel at sequans.com> wrote:
> Astan Chee wrote:
>> Hi,
>> I've got a python script that calls a function many times with various
>> arguments and returns a result. What I'm trying to do is run this
>> function each on different processors and compile the result at the
>> end based on the function result. The script looks something like
>> this:
>>
>>
>> import time
>>
>> def functionTester(num):
>>     return ((num+2)/(num-2))**2
>>
>> num_args = [1,2,3,7,12,16,19,35,36,37,38,55,56,57,63,44,71,81,91]
>>
>> max_result = 0
>>
>> start = time.time()
>>
>> for n in num_args:
>>     result = functionTester(n)
>>     if result > max_result:
>>         max_result = result
>>
>> print "Result " + str(max_result)
>> end = time.time()
>> elapsed= end - start
>> print "Took", elapsed, "seconds to execute"
>>
>>
>> What I'm trying to do is run each function on a processor and when its
>> done, move on to the next function-argument specifically on windows 7
>> x64 using python 2.6. How do I do this?
>> Thanks for any help
>>
> If I'm not wrong, CPU management is handled by your system, meaning
> there's no way to 'force' anything to run on a specific CPU. However,
> you may try to execute your fonction in a subprocess, so that the system
> will use different CPUs (hopefully). You then just need to limit the
> number of subprocess alive at the same time.
>
> Have a look here
> http://docs.python.org/library/multiprocessing.html
>
> JM
>



More information about the Python-list mailing list