没有挂起父进程的子进程

时间:2014-04-01 02:17:29

标签: python-2.7 subprocess multiprocessing maya

我有python函数,我在maya中运行该过程。我想将该函数作为另一个进程运行,因此maya仍然会响应,我可以继续在maya上工作。

from multiprocessing import Process
def test_func(node):
   # I have some crazy functions in here
   pass

def run_test():
   p = Process(target=test_func, args=(items,))
   p.daemon = True
   p.start()

这只是一个测试功能。我想展示我想要做的事情。知道在不打扰maya的情况下启动流程的聪明方法是什么?

非常感谢

2 个答案:

答案 0 :(得分:2)

对于每个人来说,这可能并不明显,因为您很快就会解决一个关键问题......但您正试图在Autodesk Maya的会话中使用multiprocessing。据我所知,这是行不通的。

出于高级别的原因,我相信其他人可以提供更多细节,multiprocessing.Process想要分叉Maya进程并继续运行。这意味着它需要复制整个maya图像(如果你在场景中做很多事情,可能会超过1GB的内存),并继续运行。您通过Maya API执行的任何操作都将处于完全不同的过程中,位于不同的场景图中。此外,您很可能会死锁,因为主进程中的所有各种同步原语状态现在都按原样复制到新空间。

最好坚持使用Maya中的线程解决方案,或者外包到外部进程。即使使用线程,你也有一些与Maya API交互的能力有限,它们提供了执行主线程调用的工具,甚至可以等待他们的结果。

同样,其他任何对过程分叉和死锁有更多低级知识的人,请随意扩展这个答案。

答案 1 :(得分:0)

我没有做任何python多线程,只有c ++,但除非Process隐式使用多线程,否则它不会同时运行。查找作为标准库一部分的线程模块的文档。