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