Hi Justin,
Thanks a million !
I will try this as soon as I have access to maya again.
Its a shame that the .set_executable() function is windows only. As that
would have been a great solution. However being able to use the standard
interpreter is a great alternative!.
I will get back to you asap with the test results.
Jan
2013/2/8 Justin Israel justinisr...@gmail.com
I am not sure what platform you are running, but on OSX this is even more
problematic. It creates orphaned processes that don't close and keep
spinning the cpus.
The problem, as I understand it, is that the multiprocessing module needs
to be able to fork, copy the memory, and start up the same interpreter
again. But Maya is using an embedded python interpreter and it thinks it
needs to start up Maya in the new processes, which crashes. On windows, the
multiprocessing module has the .set_executable() function:
http://docs.python.org/2/library/multiprocessing.html#multiprocessing.set_executable
But I don't have windows to test trying to set this to a valid python
interpreter, and it is not even platform independent as a solution.
What I have gotten to work just fine is the workflow of running your
script in a subprocess, and communicating the results back over the pipe.
This allows multiprocessing to run under whatever standard python
interpreter you want, and is independent of Maya.
There are two files here:
https://gist.github.com/justinfx/4741527
The first one is a modified version of your original code.
The second is the snippet to launch the subprocess from Maya and read the
results.
-- justin
On Feb 8, 2013, at 6:04 AM, Jan: wrote:
Hi,
i'm trying to use the python multiprocessing module to make my script
multi-threaded.
However every time it tries to start a new process it loads up the output
window with command line on how to load the maya batch process.
When I close the window the process closes as well and the function is
never called or it locks up.
Unfortunately I have no idea how I can pass command line info from the
multiprocessing function.
So my question is:
How can I load a multiprocessing process without having the output window
pop up and the process running properly.
Any help would be much appreciated.
(I was thinking of running my code inside of a different interpreter but I
have no idea on how to go at it)
Example function: (it works fine in any other standard python (2.6)
interpreter ).
from multiprocessing import Pool
from time import time
## Simple func to eat up cpu power.
def whileFunc(z):
while z 100:
z += 1
return z
## We have to work in __main__ else in some os versions the threads become
unsafe
if __name__ == __main__:
## Get current time
currtime = time()
## How often to run (just a test value)
N = 1000
## Just a list with 1s
myList = [1]*N
nrOfProcessors = 8 #16
## Set our pool of processors
po = Pool(nrOfProcessors)
## create the threads
res = po.map_async(whileFunc, myList)
print 'This value below should be a 1000:'
## The res.get() getting of the result actually starts the threads
(surprisingly enough.)
## This is also where maya will open up the Output Window and in some
cases lock up.
print len(res.get())
print 'time elapsed:', time() - currtime
--
You received this message because you are subscribed to the Google Groups
Python Programming for Autodesk Maya group.
To unsubscribe from this group and stop receiving emails from it, send an
email to python_inside_maya+unsubscr...@googlegroups.com.
To post to this group, send email to python_inside_maya@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups
Python Programming for Autodesk Maya group.
To unsubscribe from this group and stop receiving emails from it, send an
email to python_inside_maya+unsubscr...@googlegroups.com.
To post to this group, send email to python_inside_maya@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups
Python Programming for Autodesk Maya group.
To unsubscribe from this group and stop receiving emails from it, send an email
to python_inside_maya+unsubscr...@googlegroups.com.
To post to this group, send email to python_inside_maya@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.